PGSQL存储过程中无法将JSON数组转为text[]赋值给变量
问题解决:PostgreSQL中JSON数组转text[]报错的处理
错误原因分析
- 运算符优先级错误:
::类型转换的优先级高于->>运算符,你写的arr[i]->>val::text[]实际执行逻辑是arr[i] ->> (val::text[]),但->>仅接受文本类型的键,因此触发operator does not exist: json ->> text[]错误。 - 格式不兼容:即便修正优先级,
arr[i]->>val返回的是JSON数组格式的字符串(如["cust_full_name","cust_email"]),而PostgreSQL的text[]类型语法为{元素1,元素2},无法直接通过::text[]转换。
解决方案
方案1:直接提取JSON数组并转换(推荐)
使用->运算符获取JSON类型的数组(而非->>转成字符串),再配合内置函数转换为text[]:
- 若
arr是jsonb类型:
data_ = array(select jsonb_array_elements_text(arr[i]->val));
- 若
arr是json类型:
data_ = array(select json_array_elements_text(arr[i]->val));
方案2:修正优先级后转换字符串格式
先修正运算符优先级,再处理JSON数组字符串的格式,转换为PostgreSQL兼容的text[]:
-- 先加括号确保先执行->>,再处理字符串格式 data_ = string_to_array(trim(arr[i]->>val, '[]'), '","')::text[];
该代码会先去除字符串首尾的[],再以","为分隔符拆分字符串,最终转换为text[]类型。
内容的提问来源于stack exchange,提问作者dark9198
相关产品推荐
相关产品推荐

