#postgresql #jsonb
Вопрос:
У меня есть столик
CREATE TABLE items (
id BIGINT PRIMARY KEY ,
data jsonb
);
Формат данных
[
{
"id": "d20fe90c-137c-4713-bde1-2d4e75178ad3",
"text": "text",
"count": 1
},
{
"id": "d20fe90c-137c-4713-bde1-2d4e75178ad4",
""text": "text",
"count": 1
}
]
Как я могу удалить количество полей из всех элементов массива данных json?
Я стараюсь
UPDATE items
SET data = data #- '{count}';
Но для этого запроса требуется индекс элемента массива, прежде чем считать как
UPDATE items
SET data = data #- '{0, count}';
Ответ №1:
Для этого нет оператора или встроенной функции. Удалите массив и агрегируйте измененные элементы таким образом:
update items t
set data = (
select jsonb_agg(elem- 'count')
from items
cross join lateral jsonb_array_elements(data) as arr(elem)
where id = t.id)
Проверьте это в бд<>скрипка.<>