Mesclando valores JSONB no PostgreSQL?
Usando o||
O operador produz o seguinte resultado:
select '{"a":{"b":2}}'::jsonb || '{"a":{"c":3}}'::jsonb ;
?column?
-----------------
{"a": {"c": 3}}
(1 row)
Gostaria de conseguir o seguinte resultado (??
apenas um espaço reservado para o operador):
select '{"a":{"b":2}}'::jsonb ?? '{"a":{"c":3}}'::jsonb ;
?column?
-----------------
{"a": {"b": 2, "c": 3}}
(1 row)
Então, você pode ver o nível superiora
chave tem seus valores filhos "mesclados", de modo que o resultado contenha ambosb
ec
.
Como você "profundamente" mescla doisJSONB valores no Postgres?
Isso é possível? Em caso afirmativo, como?
Um caso de teste mais complexo:
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)
Outro caso de teste em que um primitivo "mescla-se" e objeto:
select '{"a":{"b":{"c":3},"z":true}}'::jsonb ?? '{"a":{"b":false,"z":false}}'::jsonb ;
?column?
-----------------
{"a": {"b": false, "z": false}}
(1 row)