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 官方文档(英文)。