Как вложить json таблицу в один json объект?
Есть функция, которая возвращает таблицу, где одно поле типа json:
CREATE FUNCTION select_json_data(limit_in INTEGER, offset_in INTEGER)
RETURNS TABLE
(
data JSON
)
LANGUAGE plpgsql
AS
$$
BEGIN
RETURN QUERY SELECT data_json.json_data
FROM geo.geo_data_json data_json
JOIN (SELECT data_json_sub.id
FROM geo.geo_data_json data_json_sub
LIMIT limit_in OFFSET offset_in) AS pagination
ON pagination.id = data_json.id;
END ;
$$;
Она возвращает строки такого формата:
{
"data":[
{
"areaSize":8581,
"height":403,
"year":2011,
"code":"01.6294",
},
{
"areaSize":7441,
"height":530,
"year":2015,
"code":"01.6294",
}
]
}
^ такой json каждую запись.
Мне нужно собрать все результаты запроса в один объект такого формата:
{
"result":[
{
"data":[
{
"areaSize":8581,
"height":403,
"year":2011,
"code":"01.6294"
},
{
"areaSize":7441,
"height":530,
"year":2015,
"code":"01.6294"
}
]
},
{
"data":[
{
"areaSize":8581,
"height":403,
"year":2011,
"code":"01.6294"
},
{
"areaSize":7441,
"height":530,
"year":2015,
"code":"01.6294"
}
]
}
]
}
Чтобы в итоге функция возвращала не RETURNS TABLE (data JSON), а RETURNS JSON
Пробовал так сделать:
SELECT json_build_object('result', select_json_linked_objects(10,0));
Но это возвращает те же самые 12 строк, только заворачивает в result. И json_agg пробовал, но в нем не допускаются множество строк в качестве аргумента.
Ответы (1 шт):
Автор решения: Мелкий
→ Ссылка
SELECT json_build_object('result', json_agg(row)) from select_json_data(...) as row;