博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PostgreSQL merge json的正确姿势
阅读量:6565 次
发布时间:2019-06-24

本文共 2238 字,大约阅读时间需要 7 分钟。

json merge是业务常用的功能,例如网络爬虫,更新合并新爬到的内容。

PostgreSQL 9.5 对JSON的类型进行了非常大的功能增强,例如支持合并,按KEY删除,更新KEY VALUE等。
以合并为例
以右边的值为准,支持嵌套值的合并。

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的功能.

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插件。

转载地址:http://njjjo.baihongyu.com/

你可能感兴趣的文章
Nutanix企业云助力广播传媒的融合媒体发展之路
查看>>
信息化道路上,这两家龙头企业做了什么
查看>>
调查显示:企业将部署SDN提上议程
查看>>
鱼缸式百分比信息图表,这样计算才正确
查看>>
HTTP/2 与 WEB 性能优化(一)
查看>>
安全自动化在于信任,而非技术
查看>>
使用Yum历史查找已安装或已删除的软件包信息
查看>>
使用Python和Asyncio编写在线多人游戏(二)
查看>>
Nvidia推出强大的新图形芯片Tesl V100加速进军AI和深度学习的步伐
查看>>
实现一个简单的编译器
查看>>
用应用封装来提高移动安全,这合适吗?
查看>>
NFV转发吞吐量达120GB 赛特斯要造中国NFV新格局
查看>>
细述 Java垃圾回收机制→Types of Java Garbage Collectors
查看>>
“趣冷淡”怎么看?网络电话寻求共同语言
查看>>
PaaS模式创新:实现应用可移植性
查看>>
《Servlet和JSP学习指南》一第2章 Session管理 2.1 网址重写
查看>>
可用性追踪是虚拟化网络的关键
查看>>
把软件架构演进体现在栈上
查看>>
Win10创意者更新刚发布 夜间模式就出BUG
查看>>
文化致胜的时代 协同OA可以这样助力企业文化建设
查看>>