В PostgreSQL (v9.5) форматы JSONB предоставляют потрясающие возможности. Но теперь я застрял в том, что кажется относительно простой операцией;
сравнить два объекта jsonb; увидеть, что в одном документе отличается или отсутствует в другом.
Что у меня есть на данный момент
WITH reports(id,DATA) AS (
VALUES (1,'{"a":"aaa", "b":"bbb", "c":"ccc"}'::jsonb),
(2,'{"a":"aaa", "b":"jjj", "d":"ddd"}'::jsonb) )
SELECT jsonb_object_agg(anon_1.key, anon_1.value)
FROM
(SELECT anon_2.key AS KEY,
reports.data -> anon_2.KEY AS value
FROM reports,
(SELECT DISTINCT jsonb_object_keys(reports.data) AS KEY
FROM reports) AS anon_2
ORDER BY reports.id DESC) AS anon_1
Должен вернуть разницу строки 1 по сравнению со строкой 2:
'{"b":"bbb", "c":"ccc", "d":null}'
Вместо этого он также возвращает дубликаты ({"a": "aaa"}
). Также; в целом может быть более элегантный подход!
IF val1 IS NULL OR jsonb_typeof(val1) = 'null'
позволяет мне вернуть значение val2 целиком для случая, когда значение val1 было равно null (этот сценарий возникает при выполнении функций задержки для первой строки) - person ThePianoDentist   schedule 03.07.2019