С документация:
Все элементы параметра path
jsonb_set
, а также jsonb_insert
, кроме последнего элемента, должны присутствовать вцель.
Путь, указанный в запросе, не соответствует вышеуказанному условию.На самом деле, jsonb_set()
не работает для объектов на корневом уровне, и единственный способ - использовать оператор ||
:
select d || '{"age":30,"city":"los angeles"}'
from (
values ('{"name":"john", "age":26,"city":"new york city"}'::jsonb)
) t(d);
?column?
----------------------------------------------------
{"age": 30, "city": "los angeles", "name": "john"}
(1 row)
Возможно, было бы логично, чтобы вы могли использовать пустой путь
select jsonb_set(d, '{}', d || '{"age":30,"city":"los angeles"}')
К сожалению, разработчики jsonb не предоставили такой возможности.