开发者社区> 德哥> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

PostgreSQL merge json的正确姿势

简介: json merge是业务常用的功能,例如网络爬虫,更新合并新爬到的内容。PostgreSQL 9.5 对JSON的类型进行了非常大的功能增强,例如支持合并,按KEY删除,更新KEY VALUE等。以合并为例以右边的值为准,支持嵌套值的合并。 postgres=# select jsonb '
+关注继续查看

json merge是业务常用的功能,例如网络爬虫,更新合并新爬到的内容。
PostgreSQL 9.5 对JSON的类型进行了非常大的功能增强,例如支持合并,按KEY删除,更新KEY VALUE等。
https://www.postgresql.org/docs/9.5/static/functions-json.html
以合并为例
以右边的值为准,支持嵌套值的合并。

postgres=# select jsonb '{"k1":"v1","k2":"v2","k3":{"k1":"v3","k2":"v3","k3":"v3"}}' || jsonb '{"k1":"v1","k2":"v2","k3":{"k1":"v3","k2":"v3","k3":"v4"}}';
                               ?column?                               
----------------------------------------------------------------------
 {"k1": "v1", "k2": "v2", "k3": {"k1": "v3", "k2": "v3", "k3": "v4"}}
(1 row)

postgres=# select jsonb '{"k1":"v1","k2":"v2","k3":{"k1":"v3","k2":"v3","k3":"v3"}}' || jsonb '{"k0":"v0","k1":"v1","k2":"v10000","k3":{"k1":"v4","k2":"v3","k3":"v4","k4":{"k4":"v4"}}}' ;
                                                 ?column?                                                 
----------------------------------------------------------------------------------------------------------
 {"k0": "v0", "k1": "v1", "k2": "v10000", "k3": {"k1": "v4", "k2": "v3", "k3": "v4", "k4": {"k4": "v4"}}}
(1 row)

postgres=# select jsonb '{"k1":"v1","k2":"v2","k3":{"k1":"v3","k2":"v3","k3":"v3"}}' || jsonb '{"k0":"v0","k2":"v10000","k3":{"k1":"v4","k2":"v3","k3":"v4","k4":{"k4":"v4"}}}' ;
                                                 ?column?                                                 
----------------------------------------------------------------------------------------------------------
 {"k0": "v0", "k1": "v1", "k2": "v10000", "k3": {"k1": "v4", "k2": "v3", "k3": "v4", "k4": {"k4": "v4"}}}
(1 row)

如果你用的是PostgreSQL9.5 以前的版本,使用jsonbx这个插件也能扩展JSON的功能.
http://pgxn.org/search?q=jsonbx&in=extensions

List of implemented functions
---------------------------------

* jsonb_indent
* jsonb_concat
* jsonb_delete(jsonb, text)
* jsonb_delete_idx(jsonb, int)
* jsonb_delete_path(jsonb, text[])
* jsonb_set(jsonb, text[], jsonb, boolean)

List of implemented operators
---------------------------------

* concatenation operator (||)
* delete key operator (jsonb - text)
* delete key by index operator (jsonb - int)
* delete key by path operator (jsonb - text[])

另外需要提醒一下,因为json合并大多数情况下是会导致合并后的JSON更大的,所以使用数据库存储时,即使不是多版本的数据库也可能造成行迁移,导致索引的变化。

PS:
阿里云RDS PG 9.4的用户,如果要使用以上扩展的jsonb功能,在对应实例的对应数据库中创建这个插件即可。
create extension jsonbx;
如果创建这个扩展报 插件不存在的错误,说明您的PG小版本可能较低,需要先在阿里云RDS控制台升级一下对应实例的版本,然后再创建jsonbx插件。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
KDD 2019 | GATNE:一种针对 Multi-Edge 的大规模异构图嵌入模型
本文处理的就是这种包含异构节点和异构边的图的嵌入学习。
4797 0
PostgreSQL 10.1 手册_部分 III. 服务器管理_第 26 章 高可用、负载均衡和复制
第 26 章 高可用、负载均衡和复制 目录 26.1. 不同方案的比较 26.2. 日志传送后备服务器 26.2.1. 规划 26.2.2. 后备服务器操作 26.2.3. 为后备服务器准备主控机 26.
1132 0
PostgreSQL 10.1 手册_部分 III. 服务器管理_第 19 章 服务器配置_19.7. 查询规划
19.7. 查询规划 19.7.1. 规划器方法配制 19.7.2. 规划器代价常量 19.7.3. 遗传查询优化 19.7.4. 其他规划器选项 19.7.1. 规划器方法配制 这些配置参数影响查询优化器选择查询计划的暴力方法。
1221 0
PDCA + GTD + 番茄工作法
关键字:番茄工作法 前言 番茄工作法已实践了两年多了,番茄工作法没有 dead line 的概念,如果仅仅使用番茄工作法来工作,可能缺少了 dead line 意识。
853 0
jstl
1 选择分支 0.00 ${royalties } 2 判断 在线 离线 3. 三目运算 请选择 到付 ...
588 0
MVC3中Json的应用
应该一: 无刷新联动效果get方式: public ActionResult MaterialByClass(string l) { var materials = _db.
570 0
+关注
德哥
公益是一辈子的事, I am digoal, just do it.
文章
问答
来源圈子
更多
让用户数据永远在线,让数据无缝的自由流动
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
PolarDB for PostgreSQL三节点功能介绍
立即下载
PolarDB for PostgreSQL 源码与应用实战
立即下载
PostgreSQL 10.1 中文手册
立即下载