如何使用新的PostgreSQL JSON数据类型内的字段进行查询?

我正在寻找PostgreSQL 9.2中新JSON函数的一些文档和/或示例。

具体来说,给定一系列JSON记录:

[

{name: "Toby", occupation: "Software Engineer"},

{name: "Zaphod", occupation: "Galactic President"}

]

如何编写SQL以按名称查找记录?

在原始SQL中:

SELECT * from json_data WHERE "name" = "Toby"

官方开发手册非常稀疏:

  • http://www.postgresql.org/docs/devel/static/datatype-json.html
  • http://www.postgresql.org/docs/devel/static/functions-json.html

更新我

我汇总了PostgreSQL

9.2当前可能的功能。使用一些自定义函数,可以执行以下操作:

SELECT id, json_string(data,'name') FROM things

WHERE json_string(data,'name') LIKE 'G%';

更新二

我现在将JSON函数移到了自己的项目中:

一组用于将PostgreSQL和PL /

v8转换为一个很棒的JSON文档存储的功能

回答:

Postgres 9.2

我在pgsql-hackers列表中引用了Andrew

Dunstan:

在某个阶段可能会有一些json处理(与json生成相反)功能,但在9.2中没有。

并不能阻止他提供应该解决您的问题的PLV8示例实现。

Postgres 9.3

提供大量新功能和运算符,以添加“ json-processing”。

  • 有关新JSON功能的手册。
  • 有关第9.3页中的新功能的Postgres Wiki。
  • @Will 在以下评论中发布了指向博客的链接,该博客演示了新的操作员。

Postgres 9.3中 的答案:

SELECT *

FROM json_array_elements(

'[{"name": "Toby", "occupation": "Software Engineer"},

{"name": "Zaphod", "occupation": "Galactic President"} ]'

) AS elem

WHERE elem->>'name' = 'Toby';

高级示例:

对于更大的表,您可能需要添加一个表达式索引以提高性能:

  • 在JSON数组中查找元素的索引

PostgreSQL 9.4

添加 (b为“二进制”,值存储为本地Postgres类型),并且 两种 类型 都具有

更多功能。除了上面提到的表达式索引外,jsonb还支持GIN,btree和hash索引,其中GIN是最有效的。

  • 本手册json以及jsonb数据类型和功能。
  • 第9.4页的JSONB上的Postgres Wiki

该手册建议如下:

通常, ,除非有非常特殊的需求,例如关于对象键顺序的传统假设。

大胆强调我的。

性能从GIN索引的总体改进中受益。

Postgres 9.5

完整的jsonb功能和操作员。添加更多功能以jsonb进行就地操作和显示。

  • Postgres 9.5的发行说明中的​​主要好消息。

以上是 如何使用新的PostgreSQL JSON数据类型内的字段进行查询? 的全部内容, 来源链接: utcz.com/qa/431404.html

回到顶部