No Postgres 9.5+ você pode mesclar JSONB assim:
select json1 || json2;
Ou, se for JSON, coagir para JSONB se necessário:
select json1::jsonb || json2::jsonb;
Ou:
select COALESCE(json1::jsonb||json2::jsonb, json1::jsonb, json2::jsonb);
(Caso contrário, qualquer valor nulo em
json1
ou json2
retorna uma linha vazia) Por exemplo:
select data || '{"foo":"bar"}'::jsonb from photos limit 1;
?column?
----------------------------------------------------------------------
{"foo": "bar", "preview_url": "https://unsplash.it/500/720/123"}
Parabéns a @MattZukowski por apontar isso em um comentário.