如何阻止Redshift自动将视图的CTE改写为嵌套子查询?
Redshift视图CTE被自动改写的处理方案
Redshift在存储视图的DDL时,会自动将CTE(公共表表达式)展开为嵌套子查询,这是它的内部优化机制,目前没有办法通过配置或参数阻止这种自动改写。
如果想要保留原有的CTE业务逻辑方便后续解读和维护,可以用以下几种替代方式:
- 将原带CTE的视图创建语句保存到专门的代码文档或版本控制系统中,和视图名称做关联标记,后续维护时直接查看这份源语句。
- 给视图添加注释,把原CTE逻辑嵌入注释里,通过
COMMENT ON VIEW命令实现:
之后可以通过COMMENT ON VIEW public.vw_some_table IS '原视图创建逻辑: drop view if exists public.vw_some_table cascade; create or replace view public.vw_some_table as ( with interim_table as (select player_name , avg(score) as total_score from public.table_1 group by 1 ) , final_table as (select player_name , total_score + 3 as total_score_adj from interim_table ) select * from final_table);';SELECT obj_description('public.vw_some_table'::regclass);查看注释里的原逻辑。
内容的提问来源于stack exchange,提问作者DJC
相关产品推荐
相关产品推荐

