如何解决Redshift中PG_TABLE_DEF数据存入临时表的CTAS报错问题?
解决Redshift从PG_TABLE_DEF导数据到临时表的报错问题
问题根源是PG_TABLE_DEF仅在Leader节点存在,而默认的CTAS语句会分发到计算节点执行,计算节点无法访问Leader节点的系统表,所以触发不支持的错误。直接用以下步骤解决:
先手动创建临时表,匹配你需要的PG_TABLE_DEF字段结构
CREATE TEMP TABLE temp_table_list ( schemaname VARCHAR(128), tablename VARCHAR(128) -- 如需其他字段,比如owner、hasindex,按需添加对应类型字段 );用带
LEADER关键字的INSERT语句从PG_TABLE_DEF取数插入临时表INSERT INTO temp_table_list SELECT schemaname, tablename FROM pg_table_def WHERE schemaname = 'your_target_schema' -- 按需添加过滤条件,比如排除系统 schema LEADER; -- 强制查询在Leader节点执行,才能访问PG_TABLE_DEF
这样操作后,临时表就能正常存储PG_TABLE_DEF的表名数据,后续在存储过程里可以直接查询这个临时表,用row_number()窗口函数结合循环处理,替代游标功能。
内容的提问来源于stack exchange,提问作者Scott77
相关产品推荐
相关产品推荐

