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

PostgreSQL向整数数组追加整数时出现jsonb转integer[]错误如何解决

PostgreSQL jsonb数组追加元素报错修复方案

核心错误点

  • 类型转换不合法:jsondoc->'PhoneNumber'返回的是jsonb类型的数组,没有直接到原生int[]的强制转换规则,因此抛出「Cannot cast type jsonb to integer[]」报错。
  • jsonb_build_object使用错误:该函数接收「键名、键值」的参数顺序,你误将字段值作为键名传入,会导致合并后的JSON结构异常。

修复后的UPDATE语句

如果需要转成PostgreSQL原生整数数组做额外校验处理,可以使用以下写法:

UPDATE querytesting 
SET jsondoc = jsondoc || jsonb_build_object(
    'PhoneNumber', 
    array_append(
        ARRAY(SELECT jsonb_array_elements_text(jsondoc->'PhoneNumber'))::int[], 
        6789
    )::jsonb
) 
WHERE id = 1;

逻辑说明

  • 通过jsonb_array_elements_text将jsonb格式的电话号码数组拆分为文本元素,再聚合为PostgreSQL原生整数数组,实现合法类型转换
  • 使用array_append完成整数追加后,重新转为jsonb类型与原字段合并
  • 如果业务场景中PhoneNumber字段可能为空,可额外添加COALESCE判空逻辑避免空值报错。

更简洁的优化方案

如果不需要转原生数组做额外处理,直接使用jsonb原生操作符即可完成数组追加,性能更好逻辑更简洁:

UPDATE querytesting 
SET jsondoc = jsonb_set(
    jsondoc, 
    '{PhoneNumber}', 
    jsondoc->'PhoneNumber' || to_jsonb(6789)
) 
WHERE id = 1;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 13:45:03