SQLLab
func-jsonPostgreSQL

JSONB_SET()

Изменяет значение по указанному пути внутри JSONB — без перезаписи всего документа.

Синтаксис
JSONB_SET(target, path, new_value [, create_if_missing])

Примеры

Обновление поля верхнего уровня
SELECT JSONB_SET('{"name": "Аня", "age": 25}', '{age}', '26');
{"name": "Аня", "age": 26}
Обновление одного поля в колонке JSONB
UPDATE products
SET attributes = JSONB_SET(attributes, '{price}', '999')
WHERE id = 1;
Путь во вложенный объект через запятую
SELECT JSONB_SET('{"user": {"city": "Москва"}}', '{user,city}', '"Питер"');
{"user": {"city": "Питер"}}

Важно знать

  • path — это массив ключей вида '{key1,key2}', а не строка через точку.
  • Значение (new_value) само должно быть валидным JSON — строку нужно обернуть в двойные кавычки.
  • Четвёртый аргумент (по умолчанию TRUE) — создавать ли ключ, если его не было.