PostgreSQL PL/pgSQL函数传入JSON数组键值对报错如何解决?
问题解决方案
报错原因
你使用#>>操作符提取JSON字段时,返回的是JSON数组格式的字符串值"[1]",PostgreSQL无法直接将该字符串隐式转换为原生bigint[]数组类型,因此抛出数组字面量格式错误。你的函数调用语句本身符合要求,无需修改,只需要调整函数内部的数组赋值逻辑即可。
修复步骤
- 首先清理DECLARE块的冗余语法,你重复写了
declare关键字,删除多余的即可:
DECLARE _text text; _ids bigint[];
- 替换原有的_ids赋值语句,使用JSON数组解析函数完成类型转换,兼容性最好的写法如下:
_ids := ARRAY(SELECT json_array_elements_text(data -> 'ids')::bigint);
如果你的PostgreSQL版本在12及以上,也可以使用更简洁的写法:
_ids := json_populate_record(null::bigint[], data -> 'ids');
验证
修改完成后重新创建函数,原来的调用语句就可以正常执行:
select * from data_get ('{"text":"","ids":[1]}'::json) as info;
内容的提问来源于stack exchange,提问作者Code Guru
相关产品推荐
相关产品推荐

