Как удалить поле из каждого элемента массива json postgres?

#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)
 

Проверьте это в бд<>скрипка.<>