按键访问jsonb value[]

Access jsonb value[] by key

我目前正在以下列格式将数据存储在 postgres 数据库的 jsonb 列中: {"ids": [4, 3, 2, 1]} 其中值是一个整数数组。

我想做以下事情:

  1. 在value
    中找到该列包含4的值的行 'ids' 键的数组。

  2. 在 'ids' 键的值数组中找到列包含值 2,3 和 1 的行。

我最近的尝试使用以下

select * from tablename WHERE (column_name -> ids)::integer[] && ARRAY[1,3]

这在 ::integer[] 处给了我一个类型转换错误 ERROR: cannot cast type jsonb to integer[]

我怀疑我正在尝试投射 'ids' 部分并且需要更深入,但我不确定如何(如果这是正确的方法)。

使用包含运算符@>

select * 
from tablename 
WHERE column_name @> '{"ids":[4]}'

这也适用于多个值:

select * 
from tablename 
WHERE column_name @> '{"ids":[1,2,3]}'

Online example

SELECT * from tablename WHERE column_name -> 'ids' @> '[4]'::jsonb
SELECT * from tablename WHERE column_name -> 'ids' @> '[2,3,1]'::jsonb