发布于 2026-01-06 1 阅读
0

PostgreSQL 中的 JSON 与 JSONB DEV 的全球展示挑战赛,由 Mux 呈现:展示你的项目!

PostgreSQL 中的 JSON 与 JSONB

由 Mux 赞助的 DEV 全球展示挑战赛:展示你的项目!

PostgreSQL® 提供两种数据类型来处理 JSON 数据:

  • JSON将 JSON 数据存储为文本,并对 JSON 语法的正确性进行验证。
  • JSONB它以自定义二进制格式优化 JSON 存储。因此,除了验证 JSON 格式的正确性之外,还需要花费时间来正确解析和存储内容。

需要免费的 PostgreSQL 数据库?
🦀 查看Aiven 的免费方案!🦀
⚡️ 需要用 AI 优化 SQL 查询?⚡️
🐧 查看Aiven AI 数据库优化器!由 EverSQL 提供技术支持 🐧

注意:更多信息请参阅PostgreSQL JSON 类型文档页面。

JSON 和 JSONB 有什么区别?

贮存

主要区别在于数据的存储方式:虽然JSON将数据存储为文本,但通过创建树状结构JSONB来优化信息存储

读写能力

两种格式都会进行内容验证,以确保输入是有效的 JSON 文档。但是,虽然JSON只进行整体检查,但JSONB数据随后会从字符串转换为树状结构。这种额外的处理意味着,由于解析过程更精简,插入数据时JSON速度更快JSONB。另一方面,在检索数据时,尤其是在仅选择文档子集的情况下,性能JSONB要好得多,因为解析二叉树的速度远快于扫描整个文档并选择部分子项。

内容不可更改性

使用时JSONB,可以修改 JSON 文档的内容:

  • 删除不必要的空格:字符串外部的空格将被删除。

例如,字符串{"id": "123"}之间的 3 个空格将被删除,因为它们是不必要的。:123

  • 重复键合并:如果文档的同一级别存在重复键,则只保留最后一个值。

例如,只会保留{"id":"123", "name":"Ugo", "name":"Francesco"}关联"name":"Francesco"关系。嵌套结构和数组将正确存储。

  • 键的顺序可以改变:插入和检索 JSON 文档时,键的顺序可以改变。

例如,该文档{"id":"123", "name":"Ugo"}可以被检索为{"name":"Ugo", "id":"123"}

因此,如果您绝对需要保留空格、重复的键或键的顺序,则需要使用JSON

索引

由于其优化的数据结构, PostgreSQLJSONB提供了对整个文档或部分文档进行索引的高级方法。更多信息请参阅PostgreSQL JSON 索引专题页面

编辑

PostgreSQLJSON将 JSON 文档存储为文本,因此对文档的任何编辑都会导致整个内容被替换。
JSONB则提供了一种方法,可以只编辑树中的特定条目,而不会更改文档的其余部分。更多信息请参阅“如何在 PostgreSQL 中编辑 JSON 文档?”

概括

下表总结了PostgreSQL 中数据类型JSON之间的区别。JSONB

质量 JSON JSONB
数据存储格式 原始文本 自定义二进制文件
编写速度更快,仅需最少的 JSON 验证 由于二进制转换开销,写入速度较慢。
阅读速度较慢,需要重新解析。 阅读速度更快
留白 保存完好 已移除
重复的钥匙 保存完好 只保留最后一个值。
钥匙顺序 保存完好 可以更改
指数支持 是的
JSON 项目编辑支持 是的

请查看主页上列出的所有 JSON PostgreSQL 用例

文章来源:https://dev.to/ftisiot/json-vs-jsonb-in-postgresql-5cj3