AWS Redshift可以删除包含在事务中的表吗?

时间:2017-02-17 12:15:21

标签: sql amazon-web-services transactions amazon-redshift amazon-data-pipeline

在ETL期间,我们执行以下操作:

    begin transaction;

    drop table if exists target_tmp;
    create table target_tmp like target;

    insert into target_tmp select * from source_a inner join source_b on ...;
    analyze table target_tmp;

    drop table target;
    alter table target_tmp rename to target;

    commit;

如果这很重要,则由AWS Data Pipeline执行SQL命令。

但是,管道有时会失败并出现以下错误:

    ERROR: table 111566 dropped by concurrent transaction

Redshift支持可序列化隔离。其中一个命令是否会破坏隔离?

1 个答案:

答案 0 :(得分:3)

是的,但是如果生成临时表需要一段时间,您可以期望在运行时查看其他查询的错误。您可以尝试在单独的事务中生成临时表(除非您担心源表的更新,否则可能不需要事务)。然后快速轮换表名,以便争用时间更短:

-- generate target_tmp first then
begin;
alter table target rename to target_old;
alter table target_tmp rename to target;
commit;
drop table target_old;