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

PostgreSQL中如何将JSONB字段存入变量?当前获取值为空

解决PostgreSQL中SELECT INTO获取JSONB字段值为空的问题

你执行以下SQL尝试将JSONB字段值存入变量in_batch_id时,结果为空:

SELECT ((payload->>'99')::jsonb)->>'BATCH_ID' into in_batch_id 
  from history where id = table.ID;

对应的JSONB数据结构如下:

{
  "1": {
    "seq": null,
    "doc_id": null,
    "batch_id": "91"
  },
  "2": {
    "seq": null,
    "doc_id": null,
    "batch_id": "91"
    
  },
  "99": {
    "seq": null,
    "doc_id": null,
    "emp_id": null,
    "batch_id": 91
   }
}

问题原因

PostgreSQL的JSON/JSONB键名区分大小写,你SQL里用的是大写的'BATCH_ID',但JSON结构中对应的键是小写的'batch_id',导致匹配不到值,所以变量结果为空。

修正后的SQL

直接把键名改成小写即可,同时可以简化SQL写法(不需要额外转成jsonb,->>已经返回text类型,嵌套取值可以用#>>路径语法更简洁):

方法1:简化嵌套写法

SELECT payload #>> '{99, batch_id}' INTO in_batch_id
FROM history WHERE id = table.ID;

方法2:保持原嵌套逻辑,修正键名

SELECT ((payload->>'99')::jsonb)->>'batch_id' INTO in_batch_id
FROM history WHERE id = table.ID;

额外说明

如果in_batch_id是数值类型变量,你可以用->获取jsonb类型后再转成对应数值类型,比如:

SELECT (payload #> '{99, batch_id}')::int INTO in_batch_id
FROM history WHERE id = table.ID;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 01:00:48