首页 > 解决方案 > 如何在 PostgreSQL 中查询 jsonb 列中的值?

问题描述

给定一jsonbpairs,在单个记录中使用如下数据调用:

{ "foo": 1, "bar": 2 }

如何查询给定值是上述字段中的值之一的记录。

例如,查询 1 将匹配上述记录。
3 的查询不匹配。

PostgreSQL 9.5

标签: jsonpostgresqljsonbpostgresql-9.5

解决方案


在 Postgres 9.5jsonb_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)')

阅读更多:JSON 函数和运算符。


推荐阅读