发布于 2026-01-06 43 阅读
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