首页 > 数据库 >PostgreSQL教程:JSON&JSONB类型

PostgreSQL教程:JSON&JSONB类型

时间:2023-09-24 23:06:41浏览次数:46  
标签:11 PostgreSQL JSONB JSON null select name


JSON在MySQL8.x中也做了支持,但是MySQL支持的不好,因为JSON类型做查询时,基本无法给JSON字段做索引。

PGSQL支持JSON类型以及JSONB类型。

JSON和JSONB的使用基本没区别。

撇去JSON类型,本质上JSON格式就是一个字符串,比如MySQL5.7不支持JSON的情况的下,使用text也可以,但是字符串类型无法校验JSON的格式,其次单独的字符串没有办法只获取JSON中某个key对应的value。

JSON和JSONB的区别:

  • JSON类型无法构建索引,JSONB类型可以创建索引。
  • JSON类型的数据中多余的空格会被存储下来。JSONB会自动取消多余的空格。
  • JSON类型甚至可以存储重复的key,以最后一个为准。JSONB不会保留多余的重复key(保留最后一个)。
  • JSON会保留存储时key的顺序,JSONB不会保留原有顺序。

JSON中key所对应的value的数据类型

JSON

PGSQL

String

text

number

numeric

boolean

boolean

null

(none)

[
  {"name": "张三"},
  {"name": {
      "info": "xxx"
    }}

]

操作JSON:

  • 上述的四种JSON存储的类型:
select '9'::JSON,'null'::JSON,'"laozheng"'::JSON,'true'::json;
select '9'::JSONB,'null'::JSONB,'"laozheng"'::JSONB,'true'::JSONB;
  • JSON数组
select '[9,true,null,"我是字符串"]'::JSON;
  • JSON对象
select '{"name": "张三","age": 23,"birthday": "2011-11-11","gender": null}'::json;
select '{"name": "张三","age": 23,"birthday": "2011-11-11","gender": null}'::jsonb;
  • 构建表存储JSON
create table test(
    id bigserial,
    info json,
    infob jsonb
);
insert into
  test
(info,infob)   
  values 
('{"name":            "张三"              ,"age": 23,"birthday": "2011-11-11","gender": null}',
'{"name":               "张三"             ,"age": 23,"birthday": "2011-11-11","gender": null}')
select * from test;
  • 构建索引的效果
create index json_index on test(info);
create index jsonb_index on test(infob);

JSON还支持很多函数。可以直接查看 http://www.postgres.cn/docs/12/functions-json.html 函数太多了,不分析了。


标签:11,PostgreSQL,JSONB,JSON,null,select,name
From: https://blog.51cto.com/zhangxueliang/7589227

相关文章

  • PostgreSQL教程:IP类型cidr
    PGSQL支持IP类型的存储,支持IPv4,IPv6这种,甚至Mac内种诡异类型也支持这种IP类型,可以在存储IP时,帮助做校验,其次也可以针对IP做范围查找。IP校验的效果IP也支持范围查找。......
  • PostgreSQL教程:枚举类型
    枚举类型MySQL也支持,只是没怎么用,PGSQL同样支持这种数据类型可以声明枚举类型作为表中的字段类型,这样可以无形的给表字段追加诡异的规范。--声明一个星期的枚举,值自然只有周一~周日。createtypeweekasenum('Mon','Tues','Sun');--声明一张表,表中的某个字段的类型是上面声......
  • PostgreSQL教程:日期类型
    在PGSQL中,核心的时间类型,就三个。timestamp(时间戳,覆盖年月日时分秒)date(年月日)time(时分秒)在PGSQL中,声明时间的方式。只需要使用字符串正常的编写yyyy-MM-ddHH:mm:ss就可以转换为时间类型。直接在字符串位置使用之前讲到的数据类型转换就可以了。当前系统时间:-可以使用now作为......
  • PostgreSQL教程:数值类型(整型、浮点型、序列、数值的常见操作)
    整型整型比较简单,主要就是三个:smallint、int2:2字节integer、int、int4:4字节bigint、int8:8字节正常没啥事就integer,如果要存主键,比如雪花算法,那就bigint。空间要节约,根据情况smallint浮点型浮点类型就关注2个(其实是一个)decimal(n,m):本质就是numeric,PGSQL会帮你转换numeric(n,m):PGSQL......
  • PostgreSQL教程:布尔类型
    布尔类型简单的丫批,可以存储三个值,true,false,null--布尔类型的约束没有那么强,true,false大小写随意,他会给你转,同时yes,no这种他也认识,但是需要转换selecttrue,false,'yes'::boolean,boolean'no',True,FaLse,NULL::boolean;boolean类型在做and和or的逻辑操作时,结果字段A字段Baand......
  • PostgreSQL教程:单引号和双引号的使用、数据类型转换
    单引号和双引号在PGSQL中,写SQL语句时,单引号用来标识实际的值。双引号用来标识一个关键字,比如表名,字段名。--单引号写具体的值,双引号类似MySQL的``标记,用来填充关键字--下面的葡萄牙会报错,因为葡萄牙不是关键字select1.414,'卡塔尔',"葡萄牙";数据类型转换第一种方式:只需要在值......
  • PostgreSQL教程:数据类型
    PGSQL支持的类型特别丰富,大多数的类型和MySQL都有对应的关系名称说明对比MySQL布尔类型boolean,标准的布尔类型,只能存储true,falseMySQL中虽然没有对应的boolean,但是有替换的类型,数值的tinyint类型,和PGSQL的boolean都是占1个字节。整型smallint(2字节),integer(4字节),bigint(8字节)跟MySQL没......
  • PostgreSQL教程:SQL案例(创建用户、创建数据库、创建schema、赋权)
    需求构建一个用户构建一个数据库在这个数据库下构建一个schema(数据库默认有一个public的schema)将这个schema的权限赋予用户在这个schema下构建一个表将表的select,update,insert权限赋予用户实现--准备用户createuserlaozhengwithpassword'laozheng';--准备数据库createda......
  • PostgreSQL教程:权限操作
    权限操作前,要先掌握一下PGSQL的逻辑结构逻辑结构图可以看到PGSQL一个数据库中有多个schema,在每个schema下都有自己的相应的库表信息,权限粒度会比MySQL更细一些。在PGSQL中,权限的管理分为很多多层server、cluster、tablespace级别:这个级别一般是基于pg_hba.conf去配置database级别:通......
  • 什么是 JSON Web Token
    JSONWebToken(JWT),又称为JSON令牌,是一种用于在网络应用之间安全地传输信息的开放标准(RFC7519)。它采用了一种紧凑的、自包含的方式来表示信息,通常用于身份验证和授权。JWT的设计目标是确保信息的完整性和安全性,同时具备易于使用和传输的特点。JWT的结构JWT由三个部分组成,它们之......