按键访问jsonb value[]
Access jsonb value[] by key
我目前正在以下列格式将数据存储在 postgres 数据库的 jsonb 列中:
{"ids": [4, 3, 2, 1]}
其中值是一个整数数组。
我想做以下事情:
在value
中找到该列包含4的值的行
'ids' 键的数组。
在 '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]}'
SELECT * from tablename WHERE column_name -> 'ids' @> '[4]'::jsonb
SELECT * from tablename WHERE column_name -> 'ids' @> '[2,3,1]'::jsonb
我目前正在以下列格式将数据存储在 postgres 数据库的 jsonb 列中:
{"ids": [4, 3, 2, 1]}
其中值是一个整数数组。
我想做以下事情:
在value
中找到该列包含4的值的行 'ids' 键的数组。在 '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]}'
SELECT * from tablename WHERE column_name -> 'ids' @> '[4]'::jsonb
SELECT * from tablename WHERE column_name -> 'ids' @> '[2,3,1]'::jsonb