не будет работать, если один или несколько родителей не существуют. Я думаю, что он создаст ключ, только если родительский объект является объектом, а ключ еще не существует.

ользованием|| Оператор дает следующий результат:

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)

Ответы на вопрос(3)

Ваш ответ на вопрос