在单个记录中给名为jsonb
的pairs
列提供诸如以下内容的数据:
{ "foo": 1, "bar": 2 }
如何查询给定值是以上字段中的值之一的记录。
例如,查询1将匹配上面的记录。查询3不匹配。
PostgreSQL 9.5
在Postgres 9.5中,在横向连接中使用功能jsonb_each_text()
:
with my_table(pairs) as (
values
('{ "foo": 1, "bar": 2 }'::jsonb)
)
select t.*
from my_table t
cross join jsonb_each_text(pairs)
where value = '1';
升级到Postgres 12并使用json路径函数,例如:
select *
from my_table
where jsonb_path_exists(pairs, '$.* ? (@ == 1)')