не будет работать, если один или несколько родителей не существуют. Я думаю, что он создаст ключ, только если родительский объект является объектом, а ключ еще не существует.
ользованием||
Оператор дает следующий результат:
select '{"a":{"b":2}}'::jsonb || '{"a":{"c":3}}'::jsonb ;
?column?
-----------------
{"a": {"c": 3}}
(1 row)
Я хотел бы иметь возможность добиться следующего результата (??
просто заполнитель для оператора):
select '{"a":{"b":2}}'::jsonb ?? '{"a":{"c":3}}'::jsonb ;
?column?
-----------------
{"a": {"b": 2, "c": 3}}
(1 row)
Итак, вы можете увидеть верхний уровеньa
ключ имеет свои дочерние значения «объединены», так что результат содержит обаb
а такжеc
.
Как вы "глубоко" слились дваJSONB значения в Postgres?
Возможно ли это, если да, то как?
Более сложный контрольный пример:
select '{"a":{"b":{"c":3},"z":true}}'::jsonb ?? '{"a":{"b":{"d":4},"z":false}}'::jsonb ;
?column?
-----------------
{"a": {"b": {"c": 3, "d": 4}, "z": false}}
(1 row)
Еще один тест, в котором примитив «сливается» и объект:
select '{"a":{"b":{"c":3},"z":true}}'::jsonb ?? '{"a":{"b":false,"z":false}}'::jsonb ;
?column?
-----------------
{"a": {"b": false, "z": false}}
(1 row)