本文共 2517 字,大约阅读时间需要 8 分钟。
[TOC]
在PostgreSQL9.5中引入了新的JSONB功能,极大的增强了PG的NOSQL能力,本篇文章通过一些例子演示了如何使用这些强大的功能。
JSON特性从9.2版本开始引入,并在以后的新版本中不断的增强这些功能,如果您能json的操作还不太了解,建议您看看以前的文章。
在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)
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": "张三"}}
注意
下面的例子不用多说,让显示的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/