PostgreSQL 比较两个 jsonb 对象

2024-02-12

With PostgreSQL(v9.5) http://www.postgresql.org/, the JSONB https://stackoverflow.com/questions/22654170/explanation-of-jsonb-introduced-by-postgresql格式提供了绝佳的机会。但现在我陷入了看似相对简单的操作;

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


UPDATED

CREATE OR REPLACE FUNCTION jsonb_diff_val(val1 JSONB,val2 JSONB)
RETURNS JSONB AS $$
DECLARE
  result JSONB;
  v RECORD;
BEGIN
   result = val1;
   FOR v IN SELECT * FROM jsonb_each(val2) LOOP
     IF result @> jsonb_build_object(v.key,v.value)
        THEN result = result - v.key;
     ELSIF result ? v.key THEN CONTINUE;
     ELSE
        result = result || jsonb_build_object(v.key,'null');
     END IF;
   END LOOP;
   RETURN result;
END;
$$ LANGUAGE plpgsql;

Query:

SELECT jsonb_diff_val(
    '{"a":"aaa", "b":"bbb", "c":"ccc"}'::jsonb,
    '{"a":"aaa", "b":"jjj", "d":"ddd"}'::jsonb
);
            jsonb_diff_val             
---------------------------------------
 {"b": "bbb", "c": "ccc", "d": "null"}
(1 row)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PostgreSQL 比较两个 jsonb 对象 的相关文章

随机推荐

  • OllyDbg 无法调试 Visual Studio exe

    我刚刚使用以下简单代码创建了一个新的 vc exe include
  • 如何在 SSMS 单元格中输入“NULL”?

    在 SQL Server Management Studio 2012 中 我将数据键入 粘贴到表中 通过编辑前 200 行 每当我输入 粘贴时NULL在一个细胞中 一个NULL值已插入 显然它认为我的意思是NULL值而不是 NULL 文本
  • 地址范围:寿命不够长

    我对这两个看似相似的程序的结果感到惊讶 fn main let y int 31i println My number is y Output My number is 31 但是 这段代码给了我一个错误 fn main let y int
  • 在 GAE/python 中存储密码的最佳实践

    我需要在我的 GAE python2 7 应用程序中实现密码存储 我已经实现了 cookie 进行授权 我已经有了帐户 用户模型 并且我已经通过第三方进行了身份验证 现在我需要通过密码添加身份验证 客户请求 我希望安全地存储密码 我已经确定
  • 具有自定义字体的 TextView 未垂直居中

    我需要使用自定义字体 VAG Rounded 可能不相关 但字体会改变我的 TextView 的反应方式 在下图中 您可以看到两个具有黑色背景的文本视图 左边一种使用自定义字体 右边一种使用默认系统字体 Roboto 它们都有相同的 xml
  • gulp - 缩小 CSS 时排除文件

    我是 Gulp 新手 我已经能够成功安装 连接和缩小我的 js 和 css 文件 但是 有一个我想排除的 css 文件 print css 我已按照此处的说明进行操作 https www npmjs org package gulp ign
  • 仅捕获 arp-reply 数据包的 BPF 表达式

    有没有BPF http biot com capstats bpf html只捕获 arp reply 数据包的表达式 目前 我正在使用 Pcap4J 和以下 BPF 表达式 arp 和 dst 主机host和乙醚 dstmac where
  • 如何将 Firestore 查询转换为 Javascript 数组

    我正在尝试导出一个 firestore 函数 该函数执行查询并返回包含该查询中的对象的数组 我正在尝试从文档的子集合中获取数据 并获取返回的文档对象数组以呈现给客户端 我已经尝试了以下方法 但它不起作用 例如 对象返回空白 我认为这与承诺处
  • Scala 中函数组合的简洁语法?

    我正在学习 Scala 并遇到了以下任务 如果字符串为空则返回 null 否则将其大写 Apache Commons 中有两个函数组合在一起可以解决这个问题 在 Haskell 中我会这样写 upperCaseOrNull StringUt
  • Android 新手相机方向

    我正在使用相机工作面临相机方向问题 我在互联网上找到了一些答案 我认为这个答案可能最适合我 谁能给我详细的指导吗如何添加这个答案 https stackoverflow com questions 3841122 android camer
  • PG gem 不会安装在 Rails 应用程序中:Gem::Ext::BuildError: ERROR: 无法构建 gem 本机扩展

    我正在尝试将 Rails 应用程序部署到 Heroku 当我添加pggem 到我的 gemfile 并运行bundle install我收到错误 An error occurred while installing pg 1 1 3 and
  • android 可以像整数数组一样存储可绘制的 id 吗?

    我想要一个drawableid 整数值数组 我可以像这样存储integer array in res values XXX xml通过使用integer array标签 下面是声明的整数数组strings xml
  • Jupyter 笔记本内嵌图像中的光标位置和像素值

    我使用 Python 2 7 x 和 Jupyter Notebook matplotlib 和 pylab 后端以及内联标志 pylab inline 在活动单元格下方打印图像 我希望能够将光标移动到图像上并知道它的位置和像素值示例可以是
  • CSS 100% 宽度但避免滚动条

    这可能是一个已经解决了几十次的问题的变体 但 CSS 真的让我觉得自己像个傻瓜 我正在尝试构建一个可以通过多种方式定位和调整大小的小部件 这是一个非常简单的布局 固定高度的页眉 固定高度的页脚以及占用剩余空间的正文 整体宽度和高度各不相同
  • Crontab 无法在 Windows 上的 Ubuntu 上使用 Bash

    我正在尝试安排一个 bash 脚本在 Windows 10 中的 Windows 上的 Ubuntu 上使用 Bash 运行 每次我编写 cron 时 我都会在终端中收到以下错误消息 crontab installing new cront
  • wicket:child 标签可以嵌套在页面上的另一个组件下吗?

    在 Wicket 1 4 中 我试图允许子页面更改父页面中标签上的 CSS 类 我一直这样做 这种情况的奇怪之处在于我想要定位的标签包装子页面标记 这是我尝试过的简化片段 父页面 html div div
  • 简单登录unity c#脚本

    应该很简单 但仍然找不到直接答案 如何使用 C Unity 脚本记录简单的消息 我试过这个 Debug Log Hello Log 它不起作用 或者我没有找对地方 Debug Log Hello Log 可以在控制台选项卡 为了让您能够看到
  • 如何防止 Silverlight RIA 实体在我准备好之前附加到数据上下文

    我有一个用于简单 TODO 列表的 Silverlight 4 应用程序 我遇到的问题是数据绑定正在连接我的关系TODO对象 这会导致 RIA 数据上下文将其添加到DataContext TODOs在我想要它之前列出它 我想将该对象视为新的
  • 指针数组作为函数参数

    我有一个关于 C C 中数组和指针的基本问题 假设我有 Foo fooPtrArray 4 如何通过fooPtrArray变成一个函数 我努力了 int getResult Foo fooPtrArray failed int getRes
  • PostgreSQL 比较两个 jsonb 对象

    With PostgreSQL v9 5 http www postgresql org the JSONB https stackoverflow com questions 22654170 explanation of jsonb i