我有一个名为data_audit
的PostgreSQL表,其中有一个名为body
的列,其类型为json
。每行包含一个具有以下结构的值:
{
"target": {
"ids": [
"ID1",
"ID2"
]
}
}
(我删除了很多不相关的字段。)
我想选择ids
数组(可能包含0个,1个或更多个字符串)包含特定值的所有行。
我尝试了各种组合的::jsonb[]
,ANY()
,@>
,json_array_elements_text()
等等,但无济于事。
运行此查询的最简单,最有效的方法是什么?
这个表还没有投入生产,所以如果该字段属于另一种类型(jsonb
?)会更容易/更有效,那么这可能是一种选择。
我正在运行PostgreSQL 10.3。
谢谢!
这是查询所需内容的一种合适方式。
select * FROM data_audit cross join lateral
json_array_elements_text (body->'target'->'ids') as j(id)
where j.id ='ID1';