【发布时间】:2017-11-12 03:14:21
【问题描述】:
我正在尝试在 Postgres(Amazon RDS 上的 9.6)中查询 JSON 数据结构。数据包含对象数组,而对象数组又具有包含对象数组的元素。我想在其中一个嵌套数组中找到与键 + 值匹配的所有记录。
给定这样的行:
{"drinkers" : [
{"name" : "geoff",
"beers" : [
{"name": "PBR"},
{"name" : "Bud Select"}
]},
{"name" : "tom",
"beers" : [
{"name": "Bud Light"},
{"name" : "Busch"}
]}
]}
我想查找名称为“PBR”的drinkers.beers 对象的所有行。我最接近的是:
select jsonb_data
from bars
where jsonb_array_elements(jsonb_array_elements(data -> 'drinkers') -> 'beers') ->> 'name' = 'PBR'``
但这不起作用,因为 where 返回一个列表而不是单个真/假来匹配。我已经使用子查询、横向连接等提出了其他解决方案,但所有这些解决方案都存在性能问题,即使使用适当的 gin 索引也是如此。关于如何在 Postgres 中查询这样的数据结构有什么建议吗?
【问题讨论】:
标签: json postgresql