@kondratev-ad

Как в PosgreSQL, в JSON добавить key:value?

Есть таблица table_1 c именами и телефонами. В своей функции, я из нее собираю JSON и отправляю в Rabbit.
id | name | phone
1 | Flex | +86488
2 | Bobi | +458664

DECLARE my_data json;
BEGIN
  	SELECT array_to_json(array_agg(row_to_json (r))) into my_data FROM (
		SELECT name, phone  
        FROM table_1
        ) r;

       RETURN amqp.publish(1, ''::varchar, 'queue'::varchar, my_data::varchar);
END;

Оправляется что- то типо такого:
[{ "name" : "Flex", "phone": +86488},{ "name" : "Bobi", "phone": +458664}]

Как мне добавить данные в этот JSON?
Допустим, я хочу добавить "city": "SanAndreas" и получить в итоге:
[{ "name" : "Flex", "phone": +86488},{ "name" : "Bobi", "phone": +458664},{"city": "SanAndreas"}]
  • Вопрос задан
  • 172 просмотра
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
array_to_json(array_agg(row_to_json (r)))
не первый раз вижу такой конструкт, но не понимать зачем оно такое надо в таком переусложненном виде. Если нашли array_agg - значит могли заметить и json_agg там же, что приводит к простейшему select json_agg(r) from r

Для json оператора конкатенации нет, возьмите jsonb:
select jsonb_agg(r) || jsonb_build_object('city', 'SanAndreas') from tablename r;
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Akina
Сетевой и системный админ, SQL-программист.
https://www.postgresql.org/docs/current/functions-...

Оператор конкатенации JSONB - ||

В более сложных случаях - jsonb_set(), jsonb_insert()... в общем, посмотри сам.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы