↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

百科 / 数据类型 / JSON

jsonb

分解后的二进制 JSON 数据

当前查看 PostgreSQL 18。

中文定义与说明

分解后的二进制 JSON 数据

同版本中文手册节选

JSON 数据类型用于存储 JSON(JavaScript Object Notation)数据,如 RFC 7159 所定义。这类数据也可以存储为 text,但 JSON 数据类型的优势在于会强制每个存储值都符合 JSON 规则。此外,对于存储在这些数据类型中的数据,还提供了各种 JSON 专用的函数和操作符;见第 9.16 节。

PostgreSQL 提供两种用于存储 JSON 数据的类型:json 和 jsonb。为了为这些数据类型实现高效的查询机制,PostgreSQL 还提供了 jsonpath 数据类型,其说明见第 8.14.7 节。

json 和 jsonb 数据类型接收的输入值集合几乎完全相同。主要的实际区别在于效率。json 数据类型存储输入文本的精确副本,因此处理函数在每次执行时都必须重新解析;而 jsonb 数据则以分解后的二进制格式存储,由于增加了转换开销,输入时会稍慢一些,但处理起来会显著更快,因为不需要重新解析。jsonb 还支持索引,这可能是一个显著优势。

由于 json 类型存储的是输入文本的精确副本,因此它会保留词元之间在语义上无关紧要的空白,以及 JSON 对象内部键的顺序。此外,如果值中的某个 JSON 对象包含同一个键多次,所有键/值对都会被保留下来(处理函数会将最后一个值视为生效值)。相比之下,jsonb 不保留空白,不保留对象键的顺序,也不保留重复的对象键。如果输入中指定了重复的键,则只保留最后一个值。

查看完整中文手册与上下文。

PG10–20 核心源码清单。类型转换与操作符类列出源码显式声明的关系;缺少记录不能排除通过其他机制进行转换或使用索引。

定义

分解后的二进制 JSON 数据

jsonb
目录名称
pg_catalog.jsonb
类型 OID
3802
类型种类
基础类型
声明长度
变长(varlena)
存储策略
扩展
输入函数
jsonb_in
输出函数
jsonb_out

系统目录属性

此构建的源码初始化值。字段含义参见 pg_type 。包含头文件默认值;依赖构建的常量保留符号形式,不作为服务器运行时实测。

oid
3802
descr
Binary JSON
typacl
_null_
typlen
-1
typelem
0
typname
jsonb
typsend
jsonb_send
typtype
b
typalign
i
typarray
0
typbyval
f
typdelim
','
typinput
jsonb_in
typmodin
-
typndims
0
typowner
POSTGRES
typrelid
0
typmodout
-
typoutput
jsonb_out
typtypmod
-1
typanalyze
-
typdefault
_null_
typnotnull
f
typreceive
jsonb_recv
typstorage
x
typbasetype
0
typcategory
U
typcollation
0
typisdefined
t
typnamespace
pg_catalog
typsubscript
jsonb_subscript_handler
typdefaultbin
_null_
array_type_oid
3807
typispreferred
f
array_type_name
_jsonb

类型转换 9

与此类型相关的显式 pg_cast 记录。PostgreSQL 还支持 pg_cast 之外的类型转换,缺少记录不能证明转换不可能。

源类型目标类型转换上下文转换方式函数
jsonjsonb赋值输入/输出0
jsonbjson赋值输入/输出0
jsonbbool显式函数bool(jsonb)
jsonbnumeric显式函数numeric(jsonb)
jsonbint2显式函数int2(jsonb)
jsonbint4显式函数int4(jsonb)
jsonbint8显式函数int8(jsonb)
jsonbfloat4显式函数float4(jsonb)
jsonbfloat8显式函数float8(jsonb)

运算符重载 24

每种操作数签名均为独立重载。实现函数和返回类型来自同一源码构建。

运算符左操作数右操作数返回类型含义实现函数
->jsonbtextjsonb获取 jsonb 对象字段。jsonb_object_field
->>jsonbtexttext获取 jsonb 对象字段并返回文本。jsonb_object_field_text
->jsonbint4jsonb获取 jsonb 数组元素。jsonb_array_element
->>jsonbint4text获取 jsonb 数组元素并返回文本。jsonb_array_element_text
#>jsonb_textjsonb按路径元素获取 jsonb 值。jsonb_extract_path
#>>jsonb_texttext按路径元素获取 jsonb 值并返回文本。jsonb_extract_path_text
=jsonbjsonbbool等于。jsonb_eq
<>jsonbjsonbbool不等于。jsonb_ne
<jsonbjsonbbool小于。jsonb_lt
>jsonbjsonbbool大于。jsonb_gt
<=jsonbjsonbbool小于或等于。jsonb_le
>=jsonbjsonbbool大于或等于。jsonb_ge
@>jsonbjsonbbool包含。jsonb_contains
?jsonbtextbool键存在。jsonb_exists
?|jsonb_textbool任意键存在。jsonb_exists_any
?&jsonb_textbool所有键均存在。jsonb_exists_all
<@jsonbjsonbbool被包含。jsonb_contained
||jsonbjsonbjsonb连接。jsonb_concat
-jsonbtextjsonb删除对象字段。jsonb_delete(jsonb,text)
-jsonb_textjsonb删除对象字段。jsonb_delete(jsonb,_text)
-jsonbint4jsonb删除数组元素。jsonb_delete(jsonb,int4)
#-jsonb_textjsonb删除路径指定的值。jsonb_delete_path
@?jsonbjsonpathboolJSON 路径是否存在。jsonb_path_exists_opr(jsonb,jsonpath)
@@jsonbjsonpathbool匹配 JSON 路径谓词。jsonb_path_match_opr(jsonb,jsonpath)

操作符类 4

声明输入类型与此类型相符的操作符类。多态操作符类、类型转换和表达式索引还可能提供其他索引路径;不能仅凭此表判断是否支持索引。

操作符类索引方法输入类型操作符族默认存储类型
jsonb_opsbtreejsonbbtree/jsonb_ops是与输入类型相同
jsonb_opshashjsonbhash/jsonb_ops是与输入类型相同
jsonb_opsginjsonbgin/jsonb_ops是text
jsonb_path_opsginjsonbgin/jsonb_path_ops否int4

版本比较

PostgreSQL 17 → 18。属性比较不包含构建标识和说明正文;原始目录字段与源描述保留原文。

这两个样本的系统目录和结构化属性没有变化。

文档与源码

构建
18.6 · https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2
指纹
555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f

相关条目

全部数据类型 · 下载此版本 JSON · 最早收录的样本不代表该类型的实际引入版本。