Redshift中LISTAGG函数使用方法及报错解决咨询
Redshift中LISTAGG函数报错的解决方法
错误原因
Redshift规定LISTAGG、MEDIAN这类聚合函数必须作用于用户创建的表,而你查询的svv_all_columns是系统视图,不属于用户创建的表范畴,因此触发报错。
解决方案
先将系统视图中符合条件的数据导入到用户创建的临时表,再对临时表使用LISTAGG函数:
- 创建临时表存储目标表名
CREATE TEMP TABLE temp_target_tables AS SELECT DISTINCT table_name FROM svv_all_columns WHERE schema_name = 'sn' AND database_name = 'db';
- 基于临时表生成DROP语句
SELECT 'DROP TABLE IF EXISTS deleted.' || LISTAGG(table_name, ', ') || ';' AS drop_statement FROM temp_target_tables;
补充说明
- 临时表属于用户创建的对象,完全满足LISTAGG的使用要求;
- 提前用
DISTINCT去重,避免生成重复的DROP表名; - Redshift临时表仅在当前会话有效,会话结束后自动清理,无需手动删除。
内容的提问来源于stack exchange,提问作者Kartikeya Singh
相关产品推荐
相关产品推荐

