PostgreSQL9.5和JSONB的强大功能
2019独角兽企业重金招聘Python工程师标准>>>
原文地址:http://blog.2ndquadrant.com/jsonb-and-postgresql-9-5-with-even-more-powerful-tools/
- 介绍
- 连接两个jsonb对象
- 使用减号-删除对象
- 删除嵌套数组
- 新函数jsonb_set
- 美化json
- 总结
介绍
在PostgreSQL9.5中引入了新的JSONB功能,极大的增强了PG的NOSQL能力,本篇文章通过一些例子演示了如何使用这些强大的功能。
JSON特性从9.2版本开始引入,并在以后的新版本中不断的增强这些功能,
如果您能json的操作还不太了解,建议您看看以前的文章。
NoSQL with PostgreSQL 9.4 and JSONB
JSONB type performance in PostgreSQL 9.4
PostgreSQL anti-patterns: Unnecessary json/hstore dynamic columns
连接两个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.
转载于:https://my.oschina.net/lvhongqing/blog/684527
PostgreSQL9.5和JSONB的强大功能相关推荐
- Python标准库的强大功能的相关介绍
http://pyfun.com/rumen/201009/1223.html Python标准库是十分庞大的,其中也有一些质量比较高的库,例如,wXPython.Python以及其他的图形库,等等, ...
- matlab里面板有什么作用,MATLAB轻松享受GPU的强大功能
MATLAB轻松享受GPU的强大功能 MATLAB的GPU支持为活跃于许多学科的大量研究人员(不一定是CUDA编程专家)提供了一种加速科学计算的新方法.考虑到MATLAB主要是用于科学计算和工程计算, ...
- java 使用本机代理_Java与本机代理–他们所做的强大功能
java 使用本机代理 在安装代理之前应了解的内容及其对代码的影响 在构建可伸缩的服务器端应用程序时,我们花费大量时间思考如何在生产中监视,操作和更新代码. 已经开发出一种新的工具来帮助Java和Sc ...
- Java与本机代理–他们所做的强大功能
在安装代理之前应了解的内容以及它如何影响您的代码 在构建可伸缩的服务器端应用程序时,我们花费大量时间思考如何在生产中监视,操作和更新代码. 已经开发出一种新的工具来帮助Java和Scala开发人员做到 ...
- python和sql_Python和SQL 2017的强大功能
Python和SQL Server 2017的强大功能 原文来自:https://www.red-gate.com/simple-talk/sql/sql-development/power-pyth ...
- Java的这个强大功能,很多人都不知道
摘要:大多数框架采用单一的语言所开发.JNI这项Java中提供的强大功能,却逐渐的被人遗忘了. 本文分享自华为云社区<Java中一个逐渐被遗忘的强大功能,强到你难以置信!!>,作者:冰 河 ...
- CorelDRAWX4的VBA插件开发(三十一)使用C++制作动态连接库DLL辅助VBA构键强大功能-(5)在VBA中动态调用DLL文件
我们先来看一下动态调用的截图 先上代码 '静态调用 Public Declare Function wodedll Lib "E:\VS-DLL\conglingkaishi\Debug\C ...
- 计算机管理记事本,win7旗舰版系统下自带记事本的强大功能汇总【图文详解】...
记事本是windows操作系统中的一个简单的文本编辑器,记事本软件不仅可以方便管理.记录日常事务,还可以记录一些重要的资料及文件,而很多人对win7旗舰版系统下记事本的印象估计是觉得它就是一个简单的文 ...
- 高德地图完整功能的html,揭秘高德地图八大不为人知的强大功能
高德地图作为国内车主使用最多的手机地图,在日常扮演着为用户搜索地点.规划线路.躲避拥堵等等"出行服务小帮手"的重要角色.其实,作为国内领先的数字地图内容.导航和位置服务提供商高德的 ...
最新文章
- 如何评判软件测试培训机构的好坏?
- AI一分钟 | AI溃败,Dota2人机大战首场终结;阿里公布第一财季财报,净利76.50亿元...
- 线扫相机——机器视觉中无限制物体的检测
- 网站开发常用jQuery插件总结(15)上传插件blueimp
- 你的 APP 为何启动那么慢?
- monkeyrunner环境配置
- 第1章列表处理——1.1 Lisp列表
- hadoop使用lzo压缩文件笔记
- 2021年信息系统项目管理师案例分析第二题讲解
- Linux基础(day59)
- html字符串使用xpath,使用XPath和regex在HTML注释中提取文本
- Android root概念
- python实现选择文件_python3实现文件选择对话框
- XElement 和 XDocument 到底有什么区别?
- TW实习日记:第16天
- 面试必会之HashMap源码分析
- MSFT_NetAdapter修改网卡名
- linux查看ps进程命令,linux ps查看进程命令
- java生命游戏并行_Java架构--线程的发展历史
- 一个前端小白的成长之路(序)
热门文章
- 关于HTML5的十条霸气侧漏预测
- 带有.rdlc报表的项目发布需要注意的问题
- 利用rank() 和 dense_rank() 来实现分类排名
- Swift3.0语言教程获取字符
- python函数定义的要点_python基础之函数重点
- 32位汇编语言helloworld_梦开始的地方——Hello World!
- @scheduled注解配置时间_探究 Spring 的定时任务配置
- Nature子刊:Neuropixels 探针单神经元分辨率的大规模神经记录
- 脑电分析系列[MNE-Python-13]| bad通道介绍
- 脑电分析系列[MNE-Python-4]| MNE中数据结构Evoked及其对象创建