使用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"}
)。还; 一般来说,可能有更优雅的方法!