JSONлише PostgreSQL

JSONB_SET

Повертає копію JSON з новим значенням за вказаним шляхом.

Синтаксис

JSONB_SET(<json>, '{<шлях>}', <нове значення>)
JSONB_SET(<json>, '{<шлях>}', <нове значення>, <створювати ключ>)

Шлях пишуть як перелік ключів у фігурних дужках: '{name}' — ключ верхнього рівня, '{address,city}' — вкладений. Нове значення має бути JSON, тож текст береться в подвійні лапки: '"Liam"'. Якщо ключа нема, він додається, а четвертий аргумент false це вимикає.

Замінити число
SELECT JSONB_SET('{"name": "Emma", "salary": 1200}', '{salary}', '1300') AS updated;
updated
{"name":"Emma","salary":1300}
Текст — у подвійних лапках
SELECT JSONB_SET('{"name": "Emma"}', '{name}', '"Liam"') AS renamed;
renamed
{"name":"Liam"}
Вкладений ключ
SELECT JSONB_SET('{"address": {"city": "London"}}', '{address,city}', '"Berlin"') AS moved;
moved
{"address":{"city":"Berlin"}}

Зверни увагу

Нове значення — JSON, а не текст: JSONB_SET(data, '{name}', 'Liam') дасть помилку invalid input syntax for type json. Пиши '"Liam"', а значення зі стовпця перетворюй через TO_JSONB(name).

Якщо нове значення NULL, результатом стане NULL увесь документ, а не ключ зі значенням null. Для null передай 'null'.

Проміжних ключів не створює: JSONB_SET('{}', '{address,city}', '"Berlin"') поверне {} без змін.

Лише повертає новий JSON. Щоб змінити дані в таблиці, потрібен UPDATE … SET data = JSONB_SET(data, …).

Схожі функції