从 postgres table 中获取行,其中包含 jsonb[] 列中的特定 id

Fetch rows from postgres table which contains a specific id in jsonb[] column

我有一个详细信息 table,其中 adeet 列定义为 jsonb[]

adeet 列中存储的示例值如下图

数据库中存储的示例数据:

我想要 return 满足 id=26088 的行,即行 13

我已经尝试了数组操作和 json 操作,但它没有按要求工作。任何指针

显然 adeet 列的类型不是 JSON/JSONB 类型,但可能是 VARCHAR 类型,我们应该修复格式以便转换为JSONB 类型。我使用 replace()r/ltrim() 函数进行此转换,并且更喜欢派生数组以便使用 jsonb_array_elements() 函数:

WITH t(jobid,adeet) AS
(
 SELECT jobid, replace(replace(replace(adeet,'\',''),'"{','{'),'}"','}')   
   FROM tab 
), t2 AS
(
SELECT jobid, ('['||rtrim(ltrim(adeet,'{'), '}')||']')::jsonb as adeet 
  FROM t
)
SELECT t.*
  FROM t2 t
 CROSS JOIN jsonb_array_elements(adeet) j
 WHERE (j.value ->> 'id')::int = 26088

Demo

您想将 JSONB 的 <@ 运算符与泛型数组 ANY 构造结合起来。

select * from foobar where '{"id":26088}' <@ ANY (adeet);