¿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)