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

PGSQL存储过程中无法将JSON数组转为text[]赋值给变量

问题解决:PostgreSQL中JSON数组转text[]报错的处理

错误原因分析

  1. 运算符优先级错误:::类型转换的优先级高于->>运算符,你写的arr[i]->>val::text[]实际执行逻辑是arr[i] ->> (val::text[]),但->>仅接受文本类型的键,因此触发operator does not exist: json ->> text[]错误。
  2. 格式不兼容:即便修正优先级,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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 12:09:55