CREATE EXTENSION jsonb_deep_sum; SELECT jsonb_deep_add('{"a": 2, "b": 1}', '{"a": 5}'); jsonb_deep_add ------------------ {"a": 7, "b": 1} (1 row) SELECT jsonb_deep_add('{"a": 2, "b": 3}', '{"a": 5, "b": 4}'); jsonb_deep_add ------------------ {"a": 7, "b": 7} (1 row) -- Objects with keys in different order SELECT jsonb_deep_add('{"b": 2, "a": 3}', '{"a": 5, "b": 4}'); jsonb_deep_add ------------------ {"a": 8, "b": 6} (1 row) -- LHS key greater than RHS SELECT jsonb_deep_add('{"b": 1}', '{"a": 2}'); jsonb_deep_add ------------------ {"a": 2, "b": 1} (1 row) -- RHS key greater than LHS SELECT jsonb_deep_add('{"a": 2}', '{"b": 1}'); jsonb_deep_add ------------------ {"a": 2, "b": 1} (1 row) -- empty object SELECT jsonb_deep_add('{}', '{"a": 2}'); jsonb_deep_add ---------------- {"a": 2} (1 row) -- not an object SELECT jsonb_deep_add('1', '{"a": 1}'); ERROR: Can only sum objects -- NULL object SELECT jsonb_deep_add(NULL, '{"a": 1}'); jsonb_deep_add ---------------- (1 row) SELECT jsonb_deep_add('{"a": "bb"}', '{"b": 1}'); ERROR: Only numeric values allowed -- Nested and independent SELECT jsonb_deep_add('{"a": {"a": 1}}', '{"b": 1}'); jsonb_deep_add ------------------------- {"a": {"a": 1}, "b": 1} (1 row) -- Deeply nested and independent SELECT jsonb_deep_add('{"a": {"a": {"a": 1}}}', '{"b": 1}'); jsonb_deep_add -------------------------------- {"a": {"a": {"a": 1}}, "b": 1} (1 row) -- Nested reverse order SELECT jsonb_deep_add('{"b": 1}', '{"a": {"a": 1}}'); jsonb_deep_add ------------------------- {"a": {"a": 1}, "b": 1} (1 row) -- Nested sum SELECT jsonb_deep_add('{"a": {"a": 1}}', '{"a": {"a": 2}}'); jsonb_deep_add ----------------- {"a": {"a": 3}} (1 row) -- Nested sum and additional property SELECT jsonb_deep_add('{"a": {"a": 1}, "b": 1}', '{"a": {"a": 2}}'); jsonb_deep_add ------------------------- {"a": {"a": 3}, "b": 1} (1 row) -- Reversed nested sum and additional prooperty SELECT jsonb_deep_add('{"a": {"a": 1}}', '{"a": {"a": 2}, "b": 1}'); jsonb_deep_add ------------------------- {"a": {"a": 3}, "b": 1} (1 row) -- Deeply nested sum SELECT jsonb_deep_add('{"a": {"a": {"a": 4}}}', '{"a": {"a": {"a": 3}}}'); jsonb_deep_add ------------------------ {"a": {"a": {"a": 7}}} (1 row) SELECT jsonb_deep_add('{"a": true}', '{"b": 1}'); ERROR: Only numeric values allowed SELECT jsonb_deep_add('{"a": [1, 2, 3,4]}', '{"b": 1}'); jsonb_deep_add ----------------------------- {"a": [1, 2, 3, 4], "b": 1} (1 row) -- Incompatible objects SELECT jsonb_deep_add('{"a": {"a": 1}}', '{"a": 1}'); ERROR: Incompatible types SELECT jsonb_deep_add('{"a": 1}', '{"a": {"a": 1}}'); ERROR: Incompatible types