jsonb操作符
json类型以文本方式存储json对象,把输入的数据原封不动的存放到数据库中,会保留多余的空格,保留重复的Key,保留Key的顺序。
jsonb类型转换文本格式json对象为二进制格式,不保留多余的空格,不保留重复的Key,不保留Key的顺序,同时支持索引。
jsonb类型除了支持json类型的操作符外,还支持以下的操作符。
继续使用之前的student表添加jsonb数据类型列
alter table student add (stu_info_b jsonb);
update student set stu_info_b = stu_info;
可以看到jsonb类型的数据结构已经发生了变动。
@>和<@操作符
test=# select stu_info_b @> '{"name": "lisi"}' from student;
?column?
----------
t
f
f
f
(4 行记录)
test=# select stu_info_b @> '{"rank": 12}' from student;
?column?
----------
f
f
f
f
(4 行记录)
test=# select stu_info_b @> '{"information":{"branch": "Computer"}}' from student;
?column?
----------
t
t
f
f
(4 行记录)
test=# select stu_info_b from student where stu_info_b @> '{"information":{"branch": "Computer"}}';
stu_info_b
--------------------------------------------------------------------------------------------------------
{"name": "lisi", "information": {"rank": 12, "branch": "Computer", "mobile_number": "13700000001"}}
{"name": "zhangsan", "information": {"rank": 1, "branch": "Computer", "mobile_number": "13700000002"}}
(2 行记录)
从结果可以看出 @> 操作符只能判断jsonb对象顶层是否包含右侧的数据,无法单独判断嵌套结构中的键值。
<@ 操作符与之相反,用于判断左边的json对象是否包含与右边。
?操作符、?|操作符和?&操作符
test=# select stu_info_b ? 'rank' from student;
?column?
----------
f
f
f
f
(4 行记录)
test=# select stu_info_b ? 'name' from student;
?column?
----------
t
t
t
t
(4 行记录)
test=# select stu_info_b -> 'information' ? 'rank' from student;
?column?
----------
t
t
t
t
(4 行记录)
test=# select stu_info_b ?| array['name','id'] from student;
?column?
----------
t
t
t
t
(4 行记录)
test=# select stu_info_b ?| array['rank','id'] from student;
?column?
----------
f
f
f
f
(4 行记录)
test=# select stu_info_b ?& array['name','id'] from student;
?column?
----------
f
f
f
f
(4 行记录)
test=# select stu_info_b ?& array['name'] from student;
?column?
----------
t
t
t
t
(4 行记录)
这3个符号都只能判断json对象的顶层的情况,对于嵌套对象需要借助 -> 操作符来进行判断。
jsonb操作符的更多相关文章
- 一些简单的PGSQL 操作
1.jsonb字段的查询 enterprisearr 字段类型为jsonb,存储格式为["物流服务商","销售服务商","供应商"]. SE ...
- PostgreSQL中JSON、JSONB基本操作符
PostgreSQL 9.5以上的版本中有了很多方便的操作符,使得操作 JSON 变得非常方便了. 一. -> 和 ->> : -> 表示获取一个JSON数组元素,支持下标值( ...
- 关于pgsql 的json 和jsonb 的数据查询操作笔记整理
关于pgsql 的json 和jsonb 的数据处理笔记 1. json 和jsonb 区别两者从用户操作的角度来说没有区别,区别主要是存储和读取的系统处理(预处理)和耗时方面有区别.json写入快, ...
- PostgreSQL存取jsonb
从PostgreSQL 9.3开始,json就成了postgres里的一种数据类型,也就是和varchar.int一样,我们表里的一个字段的类型可以为json了. 与此同时,postgres还提供了j ...
- 关于pgsql 几个操作符的效率测试比较
关于pgsql 几个操作符的效率测试比较1. json::->> 和 ->> 测试方法:单次运行100次,运行10个单次取平均时间.测试结果:->> 效率高 5% ...
- Oracle 的基本操作符
!= 不等于 select empno,ename,job from scott.emp where job!='manager' ^= 不等于 select empno,ename,job from ...
- javascript中的操作符详解1
好久没有写点什么了,根据博主的技术,仍然写一点javascript新手入门文章,接下来我们一起来探讨javascript的操作符. 一.前言 javascript中有许多操作符,但是许多初学者并不理解 ...
- c# 基础 object ,new操作符,类型转换
参考页面: http://www.yuanjiaocheng.net/webapi/config-webapi.html http://www.yuanjiaocheng.net/webapi/web ...
- oracle操作符
Oracle中算术操作符(+)(-)(*)(/) 值得注意的是:/ 在oracle中就相当于显示中的除法 5/2 = 2.5 比较操作符: 其中等号可以换成其他运算符:(后面为该操作符的单条件查询样例 ...
- C# 本质论 第三章 操作符和控制流
操作符通常分为3大类:一元操作符(正.负).二元操作符(加.减.乘.除.取余)和三元操作符( condition?consequence:alternative(consequence和alterna ...
随机推荐
- win32-使用EnumWindows比较两个窗口的Z轴
通过使用EnumWindows()和枚举窗口来手动确定EnumChildWindows()来直接确定哪个窗口在z轴上比另一个窗口高. struct myEnumInfo { HWND hwnd1; H ...
- 搭建Windows环境下的多功能免费SSH客户端
关于Windows下的SSH客户端工具,可以有许多选择,从开源免费到商业收费的,零零总总. 免费版: Putty就是最简单的SSH客户端,非常轻量级. Electerm是一个开源可免费使用的跨平台SS ...
- 在Vue中使用Canvas绘制背景
好家伙, 在vue中使用canvas绘制与在html中使用canvas绘制大致相同, 但又有所区别 法一(无图片资源): vue中canvas的使用 - 掘金 (juejin.cn) 找到canca ...
- Hibernate过滤器使用窍门
本文向大家介绍Hibernate过滤器,可能好多人还不了解Hibernate过滤器,没有关系,看完本文你肯定有不少收获,希望本文能教会你更多东西. Hibernate3新增了对某个类或者集合使用预先定 ...
- 固态硬盘使用f2fs作为根分区安装linux
目录 前言 碰到的问题 对策 我的实际操作步骤 0.警告 1. 准备 2. 分区 3. 使用网络安装debian10 4. 备份根分区 5. 修改固态硬盘linux根分区为f2fs 6.恢复备份 7. ...
- 手把手教你蜂鸟e203协处理器的扩展
NICE协处理器 赛题要求: 对蜂鸟E203 RISC-V内核进行运算算子(譬如加解密算法.浮点运算.矢量运算等)的扩展,可通过NICE协处理器接口进行添加,也可直接实现RISC-V指令子集(譬如 ...
- uniapp同步将本地图片转换为base64,支持微信、H5、APP
接上篇,少了一个方法的源代码. 先上代码: ploadFilePromiseSync = (url) => { return new Promise((resolve, reject) => ...
- UI自动化如何保持登录状态?
给页面设置cookie信息,刷新页面清楚缓存实现保持登录状态: 通过cookie保持登录,1手动登录,通过applacation提取登录的cookie,2通过driver.add_cookie({&q ...
- Android学习之SQLite数据库存储
•引言 概念 SQLite数据库,和其他的SQL数据库不同, 我们并不需要在手机上另外安装一个数据库软件,Android系统已经集成了这个数据库: 特点 SQLite是一个轻量级的关系型数据库,运算速 ...
- GoLand打开后Project消失
一直用的好好的Goland,突然不能用了,左边栏Project"消失"了. 如下: 解决方法 遇到上面问题,一般情况是GoLand的cache问题,这个时候要将GoLand清理一下 ...