如何查询 PostgreSQL 中 jsonb 列中的值?
How to query the values in a jsonb column in PostgreSQL?
假设一个名为 pairs
的 jsonb
列在单个记录中包含如下数据:
{ "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)')
假设一个名为 pairs
的 jsonb
列在单个记录中包含如下数据:
{ "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)')