¿Fusionar valores JSONB en PostgreSQL?

Utilizando la|| El operador produce el siguiente resultado:

select '{"a":{"b":2}}'::jsonb || '{"a":{"c":3}}'::jsonb ;
    ?column?     
-----------------
 {"a": {"c": 3}}
(1 row)

Me gustaría poder lograr el siguiente resultado (?? solo un marcador de posición para el operador):

select '{"a":{"b":2}}'::jsonb ?? '{"a":{"c":3}}'::jsonb ;
    ?column?     
-----------------
 {"a": {"b": 2, "c": 3}}
(1 row)

Entonces, puedes ver el nivel superiora La clave tiene sus valores secundarios "fusionados" de modo que el resultado contenga ambosb yc.

¿Cómo se fusionan "en profundidad" dosJSONB valores en Postgres?

¿Es esto posible? De ser así, ¿cómo?

Un caso de prueba más complejo:

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)

Otro caso de prueba donde un primitivo "se fusiona" y se opone:

select '{"a":{"b":{"c":3},"z":true}}'::jsonb ?? '{"a":{"b":false,"z":false}}'::jsonb ;
        ?column?         
-----------------
 {"a": {"b": false, "z": false}}
(1 row)

Respuestas a la pregunta(3)

Su respuesta a la pregunta