Вопрос:
У меня две строки JSON в таблице PostgreSQL 9.4:
the_column ———————- {«evens»: [2, 4, 6]} {«odds»: [1, 3, 5]}
Я хочу объединить все строки в один объект JSON. (Он должен работать для любого количества строк.)
Желаемый результат:
{«evens»: [2, 4, 6], «odds»: [1, 3, 5]}
Лучший ответ:
Используйте json_agg() для получения массива:
SELECT json_agg(source_column) AS the_column FROM tbl;
Или json_each() в LATERAL присоединиться и json_object_agg(), чтобы собрать элементы:
SELECT json_object_agg(key, value) AS the_column FROM tbl, json_each(data); Ответ №1
FYI, если кто-то использует jsonb в> = 9.5, и им все равно, что элементы верхнего уровня сливаются без дубликатов ключей, тогда это так же просто, как использование || оператор:
select ‘{«evens»: [2, 4, 6]}’::jsonb || ‘{«odds»: [1, 3, 5]}’::jsonb; ?column? —————————————— {«odds»: [1, 3, 5], «evens»: [2, 4, 6]} (1 row)