Как обновить массив внутри поля postgresql jsonb? - PullRequest
0 голосов
/ 27 февраля 2020

У меня есть таблица с полем jsonb, пример значения:

{
    "id": "test",
    "data": [
        {
            "folder1": ["id1", "id2", "id3"]
        }
    ]
}

Я хочу заменить массив ["id1", "id2", "id3"] внутри этих данных на [ {"id": "id1", "size": 10}, {"id": "id2", "size": 100}, {"id": "id3", "size": 1000}]:

{
    "id": "test",
    "data": [
        {
            "folder1": [
                {"id": "id1", "size": 10}, 
                {"id": "id2", "size": 100}, 
                {"id": "id3", "size": 1000}
            ]
        }
    ]
}

Если возможно обновить его в одиночной sql конструкции, мне нужно сделать это с помощью pl / sql?

1 Ответ

0 голосов
/ 27 февраля 2020

Если путь к заменяемому элементу фиксирован, вы можете использовать jsonb_set():

jsonb_set(
        mycol,
        '{data,0,folder1}',
         '[{"id": "id1", "size": 10}, {"id": "id2", "size": 100}, {"id": "id3", "size": 1000}]'::jsonb
    )

Демонстрация на DB Fiddle - используя jsonb_pretty() для форматирования.

...