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

使用ARRAY_AGG拼接JSON字段时报错operator does not exist: text ->> unknown

错误诱因

该报错由PostgreSQL运算符优先级规则触发:字符串连接符||的优先级高于JSON文本取值运算符->>,导致表达式实际执行顺序和预期不符:

  • 预期逻辑:先分别取data->>'promotion_data'和data->>'id'的文本结果,再将两个结果与中间的'-'拼接
  • 实际执行逻辑:优先执行所有||拼接操作,先将'promotion_data' || '-' || data拼接为一个字符串,再用data->>取这个拼接字符串对应的JSON字段,得到text类型的返回值,后续又对该text值执行->>'id'操作,而text类型不存在->>运算符,因此抛出报错。

你尝试的强制转换JSON操作未生效,是因为没有解决优先级问题,运算顺序没有改变,因此报错不变。第二个语句可正常执行的原因是仅有一次->>操作,拼接后的字符串刚好是JSON中存在的键名,不会触发运算符类型不匹配问题。

解决方法

给每个JSON取值操作添加括号,强制先执行JSON字段取值,再做字符串拼接即可,正确语句如下:

SELECT ARRAY_AGG( (data->>'promotion_data') || '-' || (data->>'id') )
  FROM data.persons
GROUP BY data->>'store_id';

如果data字段本身为存储JSON的text类型,在括号内补充类型转换即可:

SELECT ARRAY_AGG( (data::json->>'promotion_data') || '-' || (data::json->>'id') )
  FROM data.persons
GROUP BY data::json->>'store_id';

内容的提问来源于stack exchange,提问作者Oba Api

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 16:00:03