Redshift临时表重复创建报错问题及解决方法咨询
Redshift临时表重复创建报错的解决方法
Redshift的临时表是会话级的,一旦在当前会话中创建成功,除非手动删除或会话结束,否则会一直存在。所以你第二次执行CREATE TEMP TABLE时会提示表已存在,且原表数据不会被更新,导致TargetDate还是旧值。下面是几种可行的解决办法:
方法1:使用CREATE OR REPLACE直接替换临时表
这是最简洁的方式,执行时会自动替换已存在的同名临时表,同时更新TargetDate的值:
CREATE OR REPLACE TEMP TABLE tmp_date_var AS SELECT '2023-02-20'::DATE AS TargetDate;
方法2:先删除再创建临时表
先判断临时表是否存在,若存在则删除,再重新创建:
DROP TABLE IF EXISTS tmp_date_var; CREATE TEMP TABLE tmp_date_var AS SELECT '2023-02-20'::DATE AS TargetDate;
方法3:使用会话级变量替代临时表
如果只是存储单个变量,不需要临时表的话,可以直接用Redshift的会话变量,更灵活:
设置变量:
SET TargetDate = '2023-02-20'::DATE;
在查询中引用变量:
SELECT current_setting('TargetDate')::DATE;
修改变量时直接重新执行SET语句即可,无需处理表的创建/删除逻辑。
内容的提问来源于stack exchange,提问作者SQL_NewBe
相关产品推荐
相关产品推荐

