带有json输出的Postgresql视图
我想建立一个postgres视图,它将结果输出为json 视图应查询名为“事件”的表:带有json输出的Postgresql视图,json,postgresql,Json,Postgresql,我想建立一个postgres视图,它将结果输出为json 视图应查询名为“事件”的表: CREATE OR REPLACE VIEW jsonview AS SELECT array_to_json(array_agg(t)) as events_as_json FROM (SELECT * FROM events)t 并以json格式给出结果。这是可行的,但我现在想用如下方式指定视图的输出: SELECT * FROM jsonview WHERE events.year_begin =
CREATE OR REPLACE VIEW jsonview AS
SELECT array_to_json(array_agg(t)) as events_as_json
FROM (SELECT * FROM events)t
并以json格式给出结果。这是可行的,但我现在想用如下方式指定视图的输出:
SELECT * FROM jsonview
WHERE events.year_begin = 1552;
但这会由于不存在条目而产生错误。
有什么建议吗?我想你想要一套
create or replace view jsonview as
select row_to_json(t) as events_as_json
from events t
如果要按值进行搜索,则最好保留该列
create or replace view jsonview as
select
row_to_json(t) as events_as_json,
year_begin
from events t
但是JSON视图的意义是什么?它在各方面都很糟糕
如果您想要一个对象数组,那么最好不要创建一个视图并将其作为查询
select json_agg(row_to_json(t)) as events_as_json
from events t
where year_begin = 1552
但是,如果您真的想以非常糟糕的方式执行此操作,并从视图中过滤对象数组,那么请将视图创建为:
create or replace view jsonview as
select json_agg(row_to_json(t)) as events_as_json
from events t
并对数组进行过滤
select json_agg(obj) as events_as_json
from (
select json_array_elements(events_as_json) as obj
from jsonview
) j
where (obj ->> 'year_begin')::integer = 1552
改为创建表值函数:
CREATE FUNCTION events_json()
RETURNS SETOF json
AS
$$
SELECT ARRAY_TO_JSON(ARRAY_AGG(T))
FROM events t
$$
LANGUAGE 'sql';
CREATE FUNCTION events_json(year INT)
RETURNS SETOF json
AS
$$
SELECT ARRAY_TO_JSON(ARRAY_AGG(T))
FROM events t
WHERE year_begin = $1;
$$
LANGUAGE 'sql';
你确定你想把所有的都排在一行吗?是的,这就是我的目的。我希望结果是一个嵌套的json。json视图的优点是避免在我的框架控制器(API)中使用json编码。让Postgres创建JSON可能是一种速度优化(见:)@kOssi根据评论编辑