我正在寻找PostgreSQL 9.2中新JSON函数的一些文档和/或示例。
具体来说,给定一系列JSON记录:
[ {name: "Toby", occupation: "Software Engineer"}, {name: "Zaphod", occupation: "Galactic President"} ]
如何编写SQL以按名称查找记录?
在原始SQL中:
SELECT * from json_data WHERE "name" = "Toby"
官方开发手册非常稀疏:
我汇总了PostgreSQL 9.2当前可能的功能。使用一些自定义函数,可以执行以下操作:
SELECT id, json_string(data,'name') FROM things WHERE json_string(data,'name') LIKE 'G%';
我现在将JSON函数移到了自己的项目中:
PostSQL- 一组用于将PostgreSQL和PL / v8转换为一个很棒的JSON文档存储的功能
我在pgsql-hackers列表中引用了Andrew Dunstan:
在某个阶段可能会有一些json处理(与json生成相反)功能,但在9.2中没有。
并不能阻止他提供应该解决您的问题的PLV8示例实现。
提供大量新功能和运算符,以添加“ json-processing”。
Postgres 9.3中 原始问题 的答案:
SELECT * FROM json_array_elements( '[{"name": "Toby", "occupation": "Software Engineer"}, {"name": "Zaphod", "occupation": "Galactic President"} ]' ) AS elem WHERE elem->>'name' = 'Toby';
高级示例:
对于更大的表,您可能需要添加一个表达式索引以提高性能:
添加 jsonb (b为“二进制”,值存储为本地Postgres类型),并且 两种 类型 都具有 更多功能。除了上面提到的表达式索引外,jsonb还支持GIN,btree和hash索引,其中GIN是最有效的。
jsonb
json
该手册建议如下:
通常, 大多数应用程序应该将JSON数据存储为jsonb,除非有非常特殊的需求,例如关于对象键顺序的传统假设。
大胆强调我的。
性能从GIN索引的总体改进中受益。
完整的jsonb功能和操作员。添加更多功能以jsonb进行就地操作和显示。