【发布时间】:2020-10-27 22:26:44
【问题描述】:
我目前正在研究几年前在 8.4 版本下开发的 postgres 代码,并正在迁移到 9.4 postgres 版本,我遇到了这行代码:
string_agg(''#attribute_''||attribute_id::varchar||'':''||attribute) as attr
在这种情况下:
_myquery='INSERT INTO mytable
SELECT ID,string_agg(''#attribute_''||attribute_id::varchar||'':''||attribute,''|'') as attr
FROM my_attribute_table
GROUP BY ID;';
在迁移到 Postgres 9.4 的过程中,我得到了这个:
错误:函数 string_agg(text) 不存在 SQL 状态:42883 提示: 没有函数匹配给定的名称和参数类型。你可能需要 添加显式类型转换。
在新版本中处理 string_agg 的正确方法是什么?我知道我需要显式转换或添加分隔符,但听起来当前代码今天不会添加任何分隔符,是吗?
今天,我们在 attr 上获得的结果例如:
"#attribute_78:None#attribute_25:715#attribute_48:Consumer#attribute_538:1yr Ret Base#attribute_1178:1yr Ret Base"
【问题讨论】:
-
仅供参考,9.4 比 EOL 晚了约 6 个月。我会建议迁移到更新的受支持版本。
-
您的查询包含重复的单引号。这是否是另一个查询的一部分,也许是创建动态 SQL 的尝试?您尝试执行的实际查询是什么?
-
您真的不应该将 9.4 用作 2020 年的迁移目标。考虑直接升级到 12
-
我刚刚添加了执行此查询的上下文
标签: postgresql casting string-agg