Преобразовать jsonb в integer[]

Используется PostgreSQL старше 12 версии

Имеется таблица table, в ней есть столбцы item_id и attributes типа jsonb. Выглядит она так:введите сюда описание изображения

Необходимо добавить новый столбец attributes_ids и удалить attributes. Новый столбец должен содержать массив чисел, полученных путем замены json'а на значение его поля id.


Ответы (2 шт):

Автор решения: Roman Konoval

Можно использовать lateral join и jsonb_to_recordset:

select item_id, array_agg(id) as attribures_id
from (
   select *, row_number() over() as rn
   from t
) as t,
lateral jsonb_to_recordset(t.attributes) as (id integer, value integer)
group by rn, item_id;
→ Ссылка
Автор решения: Stefanov.sm

jsonb_array_elements и array_agg:

select 
  item_id, 
  (select array_agg((j->>'id')::int) from jsonb_array_elements(attributes) j) ids
from _table;
→ Ссылка