Преобразовать 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;