PostgreSQL9.5和JSONB的强大功能
原文地址:http://blog.2ndquadrant.com/jsonb-and-postgresql-9-5-with-even-more-powerful-tools/
介绍在PostgreSQL9.5中引入了新的JSONB功能,极大的增强了PG的NOSQL能力,本篇文章通过一些例子演示了如何使用这些强大的功能。 如果您能json的操作还不太了解,建议您看看以前的文章。 NoSQL with PostgreSQL 9.4 and JSONB 连接两个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":"张三","birthday":"1977-01-01"}}'::jsonb #- '{person,birthday}'::text[]; ?column? ----------------------------------------------- {"person": {"sex": "female","name": "张三"}} (1 row) 新函数jsonb_setselect jsonb_set('{"person":{"name":"张三"}}'::jsonb,'{person,name}','"李四"'::jsonb,false); jsonb_set ------------------------------ {"person": {"name": "李四"}} (1 row) select jsonb_set('{"person":{"name":"张三"}}'::jsonb,sex}','"female"'::jsonb,true); jsonb_set ----------------------------------------------- {"person": {"sex": "female","name": "张三"}} 注意 美化json下面的例子不用多说,让显示的json更直观一些。 select jsonb_pretty(jsonb_set('{"person":{"name":"张三"}}'::jsonb,true)); jsonb_pretty -------------------------- { + "person": { + "sex": "female",+ "name": "张三" + } + } (1 row) 总结通过以上的例子,我们可以看到,postgreSQL也是一个NOSQL数据库,因此,如果我们能熟悉PostgreSQL,那么,我们就可以在一种数据库上同时使用NOSQL和SQL技术,以避免使用不同的产品及技术造成的产品复杂性的增加和后续维护的难度。 Use PostgreSQL,Use Everywhere. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |