博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PostgreSQL9.5和JSONB的强大功能
阅读量:6243 次
发布时间:2019-06-22

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

PostgreSQL9.5和JSONB的强大功能

[TOC]

介绍

在PostgreSQL9.5中引入了新的JSONB功能,极大的增强了PG的NOSQL能力,本篇文章通过一些例子演示了如何使用这些强大的功能。

JSON特性从9.2版本开始引入,并在以后的新版本中不断的增强这些功能,

如果您能json的操作还不太了解,建议您看看以前的文章。

连接两个jsonb对象

在9.5中引入的新的JSONB操作符号

# select '{"a":3}'::jsonb || '{"b":4}'::jsonb;     ?column?------------------ {"a": 3, "b": 4}(1 row)# select '{"a":3}'::jsonb || '{"b":"a6"}'::jsonb;      ?column?--------------------- {"a": 3, "b": "a6"}(1 row)

这个功能,相当于insert和update的功能的合并,如果在原来的对象中不存在新增加的jsonb子对象,则增加,否则,则更新为新的对象.并且,不区分新的对象的类型,

使用减号-删除对象

使用减号-删除已经存在的键值对中的一个对象

select '{"a":3}'::jsonb - 'a';?column?\---------- {}(1 row)select '{"a":3,"b":"AAA"}'::jsonb - 'a';   ?column?\----------- {"b": "AAA"}(1 row)

如果jsonb对象量个数组,则你可以用 减数字 的形式用索引来删除数组元素,数组以0开头

select '["AAA","BBB","CCC"]'::jsonb -1;    ?column?---------------- ["AAA", "CCC"](1 row)

删除嵌套数组

select '{"person":{"name":"张三","sex":"female","birthday":"1977-01-01"}}'::jsonb \#- '{person,birthday}';                   ?column?----------------------------------------------- {"person": {"sex": "female", "name": "张三"}}(1 row)

或者

select '{"person":{"name":"张三","sex":"female","birthday":"1977-01-01"}}'::jsonb \#- '{person,birthday}'::text[];                   ?column?----------------------------------------------- {"person": {"sex": "female", "name": "张三"}}(1 row)

新函数jsonb_set

select jsonb_set('{"person":{"name":"张三"}}'::jsonb,'{person,name}','"李四"'::jsonb,false);           jsonb_set------------------------------ {"person": {"name": "李四"}}(1 row)select jsonb_set('{"person":{"name":"张三"}}'::jsonb,'{person,sex}','"female"'::jsonb,true);                    jsonb_set----------------------------------------------- {"person": {"sex": "female", "name": "张三"}}

注意

  1. 第三个参数必须是一个合法的jsonb类型,也就是说字符串类型必须先用双引号引起来,再用单引号引起来。
    2.第四个的布尔参数,是如果不存在这个值,是否新增,如果为true,则当不存在这个键名和值时,会增加到对象中。

美化json

下面的例子不用多说,让显示的json更直观一些。

select jsonb_pretty(jsonb_set('{"person":{"name":"张三"}}'::jsonb,                                            '{person,sex}',                                                                                                       '"female"'::jsonb,                                                                                                    true));       jsonb_pretty-------------------------- {                       +     "person": {         +         "sex": "female",+         "name": "张三"  +     }                   + }(1 row)

总结

通过以上的例子,我们可以看到,postgreSQL也是一个NOSQL数据库,因此,如果我们能熟悉PostgreSQL,那么,我们就可以在一种数据库上同时使用NOSQL和SQL技术,以避免使用不同的产品及技术造成的产品复杂性的增加和后续维护的难度。

Use PostgreSQL,Use Everywhere.

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

你可能感兴趣的文章
windows 下安装tidylib
查看>>
MapReduce的那些事
查看>>
CentOS6.5环境下OpenSSL实战:自己搭建CA中心,申请,签发,吊销,导入证书,SSL 握手详解...
查看>>
关于:url伪静态
查看>>
Android开发之制作圆形头像自定义View,直接引用工具类,加快开发速度。带有源代码学习...
查看>>
申请微信公众号
查看>>
python中 __name__的使用
查看>>
(译)iPhone: 用公开API创建带小数点的数字键盘 (OS 3.0, OS 4.0)
查看>>
WSUS客户端升级使用命令行快速自动更新系统补丁包
查看>>
如何不让上网影响工作?看看作家怎么做
查看>>
MySQL 获得当前日期时间(以及时间的转换)
查看>>
solrcloud分布式集群部署及索引操作实例
查看>>
PHP URL 重定向 的三种方法(转)
查看>>
ubuntu14.04安装docker
查看>>
Android ADT 离线下载技巧(告别在线安装的麻烦)
查看>>
MySQL umask 导致备份报错
查看>>
LunarPages LPCP面板设置访问Web Mail教程
查看>>
java Atomic
查看>>
我的友情链接
查看>>
SQL-字符串连接聚合函数
查看>>