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

PostgreSQL如何从JSONB类型中仅查询指定子键,支持PG14新特性

实现方案

以下优先使用PostgreSQL 14新增的JSON操作特性实现需求,兼顾可读性和性能:

方案1:PG14专属最优写法(推荐)

使用PG14新增的jsonb_map函数遍历JSON对象的所有键值对,结合JSONB减法操作符直接删除子对象的info字段:

SELECT jsonb_map(slots, (key, val) => val - 'info') AS slots
FROM test;

说明:

  • jsonb_map是PG14新增的JSON变换函数,可直接对JSON对象的每一组键值做自定义处理
  • val - 'info'是JSONB的减法操作符,用于删除指定键,这里直接移除每个子对象的冗余info字段,最终返回结构完全符合预期。

方案2:固定外层键场景简化写法

如果外层的0、1这类键是固定的,可以直接用路径删除操作符实现:

SELECT slots #- '{0,info}' #- '{1,info}' AS slots
FROM test;

兼容低版本PG的通用写法

如果需要兼容PostgreSQL 13及更早版本,可以用拆包再聚合的方式实现:

SELECT jsonb_object_agg(key, val - 'info') AS slots
FROM test, jsonb_each(slots)
GROUP BY test.ctid;

所有方案的返回结果均为:

{"0": {"tag": "abc"}, "1": {"tag": "def"}}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 19:06:02