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
相关产品推荐
相关产品推荐

