全部术语

JSONB 类型

PostgreSQL 中的 JSONB 是什么?它和 JSON 有什么区别?

jsonb 以分解后的二进制格式存储 JSON,查询速度快,并且可以建立索引。大多数应用都应使用这种 JSON 类型。

PostgreSQL 有两种 JSON 类型。json 存储输入文本的精确副本,而 jsonb 存储分解后的二进制形式:由于需要转换,写入稍慢,但处理速度明显更快,并且支持索引。

jsonb 不保留空白、键的顺序和重复的键;如果某个键出现两次,只保留最后一个值。使用 -> 获取 JSON 值,使用 ->> 获取文本,使用 @> 测试一个文档是否包含另一个文档。在 jsonb 列上建立 GIN 索引可以加快包含查询和键存在查询。

示例

该示例使用 @> 操作符查找城市为 Osaka 的个人资料,并以美化格式输出另一份个人资料的文档。

CREATE TABLE profiles (id int PRIMARY KEY, data jsonb NOT NULL);
INSERT INTO profiles VALUES
  (1, '{"name": "Ana", "city": "Lisbon", "tags": ["admin"]}'),
  (2, '{"name": "Ben", "city": "Osaka"}');

SELECT data->>'name' AS name FROM profiles WHERE data @> '{"city": "Osaka"}';
SELECT jsonb_pretty(data) FROM profiles WHERE id = 1;

适用于原生 PostgreSQL 16 或 17 的纯 SQL,无需任何扩展。请在一个可随时丢弃的空数据库中运行。

参考资料

PostgreSQL 官方文档(英文)。

相关术语