You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL中查询含指定键值对的JSONB列行的方法

PostgreSQL查询JSONB列包含特定键值对的SQL语句

根据你的表结构(主键id(bigint)、JSONB列data),分两种场景给出查询语句:

场景1:目标键值对在JSONB顶层

使用PostgreSQL JSONB的@>包含操作符,这是最高效的方式(如果给data列创建GIN索引,性能会更好):

SELECT id, data
FROM your_table
WHERE data @> '{"目标键": "目标值"}'::jsonb;

比如要找data里有"name": "Alice"的行,语句就是:

SELECT id, data
FROM your_table
WHERE data @> '{"name": "Alice"}'::jsonb;

场景2:目标键值对可能在数组元素或嵌套结构中

如果JSONB里包含数组,或者键值对在深层嵌套结构里,使用jsonb_path_exists函数递归遍历所有节点:

SELECT id, data
FROM your_table
WHERE jsonb_path_exists(data, '$.** ? (@."目标键" == "目标值")');

比如要找任意层级(包括数组元素)中存在"status": "active"的行,语句就是:

SELECT id, data
FROM your_table
WHERE jsonb_path_exists(data, '$.** ? (@."status" == "active")');

补充说明

  • @>操作符要求匹配的键值对是顶层的完整键值,不能匹配部分嵌套结构;
  • jsonb_path_exists支持更复杂的JSON路径查询,灵活性更高,但性能略低于@>(如果有索引的话);
  • 若频繁查询JSONB列,建议给data列创建GIN索引:CREATE INDEX idx_your_table_data ON your_table USING GIN (data);

内容的提问来源于stack exchange,提问作者ma89581

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 14:28:10