Json_agg как отдельный объект

#arrays #json #postgresql

#массивы #json #postgresql

Вопрос:

У меня есть следующая таблица:

 create table tickets (id integer, key text, value text);

insert into tickets values
(1, 'CUSTOMER_ID', 3242),
(1, 'AMOUNT', 49),
(1, 'MOVIE', 'TITANIC');
 

ожидаемый результат:

 {"CUSTOMER_ID": "3242", "AMOUNT": "49", "MOVIE": "TITANIC"}
 

Если данные в таблице будут храниться в отдельных столбцах, простой json_build_object(‘name’, column_name) будет работать, но здесь у меня разное количество строк (и они могут отличаться для каждого идентификатора)

Так что это работает не так, как я хочу

 select json_agg(jsonb_build_object(key, value)) from tickets where id = 1;
 

https://dbfiddle.uk/?rdbms=postgres_12amp;fiddle=a2140d9d9ecf7adcec13cbb1d86215c8

Комментарии:

1. используйте json_object_agg вместо json_build_object см. Руководство

Ответ №1:

 select jsonb_object_agg(key, value) from tickets where id = 1;
 

Комментарии:

1. Спасибо, на самом деле это должно быть вообще без json_build_object

2. согласен с вами !

Ответ №2:

Я думаю, вы ищете

 SELECT id,
       jsonb_object_agg(key, value)
FROM tickets
GROUP BY id;