我正在尝试在PostgreSQL 9.3中测试json
类型。
我有一个名为reports
的表格,其中有一列名为data
的json
列。JSON看起来像这样:
{
"objects": [
{"src":"foo.png"},
{"src":"bar.png"}
],
"background":"background.png"
}
我想查询表格中所有与“objects”数组中的“src”值匹配的报告。例如,是否可以查询所有与'src' = 'foo.png'
匹配的报告?我成功地编写了一条可以匹配"background"
的查询语句:
SELECT data AS data FROM reports where data->>'background' = 'background.png'
但是由于"objects"
有一系列的值,我似乎无法编写有效的查询语句。是否可以查询数据库中所有匹配'src' = 'foo.png'
的报告?我已经查看了以下资料,但仍然无法解决问题:
- http://www.postgresql.org/docs/9.3/static/functions-json.html
- 如何使用 PostgreSQL 中新的 JSON 数据类型内部的字段进行查询?
- PostgreSQL 9.3 特性:JSON 操作符
我还尝试了类似以下代码,但均无效:
SELECT json_array_elements(data->'objects') AS data from reports
WHERE data->>'src' = 'foo.png';
我不是SQL专家,所以我不知道我做错了什么。
jsonb
/ pg 9.4添加了更新。另外:对于简单情况(1级嵌套),->
运算符在pg 9.3中也适用于json
。 - Erwin Brandstetter