如何在AWS Redshift中为此案例编写事务?

时间:2016-01-07 06:52:43

标签: transactions amazon-redshift

我首先要描述这个场景,因为我可能会过度复杂化这个问题,如果是这样的话,我只会删除这个问题。

我正在运行一个每天重新创建一次表的脚本。由于创建的性质,必须删除现有表,然后创建新表。这个过程基本上是这样的:

  • 执行CREATE TABLE AS查询并为表提供占位符名称。
  • DROP TABLE IF EXISTS现有表格。
  • ALTER TABLE RENAME新创建的表。

但是,部分要求是如果丢弃或重命名时出错,我应该能够回滚丢弃并仍然保留新创建的"临时"表。显然,我必须进行交易。

虽然如何编写完整的脚本?我在想像......

CREATE TABLE target_temp AS SELECT * FROM src;
BEGIN;
DROP TABLE IF EXISTS target;
ALTER TABLE target_temp RENAME TO target
COMMIT;

或者我应该将BEGIN;移到CREATE TABLE之前?如果我理解正确,通过这样做,如果删除/重命名中存在错误,即使是create命令也会回滚,对吧?因为这不是必需的。

1 个答案:

答案 0 :(得分:3)

你的推理是正确的。

由于Redshift支持事务性DDL语句,因此它将按预期工作。我的意思是失败的交易中的所有内容都将被回滚。

说实话......提出的要求似乎没有任何意义。保留临时桌子的原因是什么?

对我而言,正确的方法是进行交易的CREATE TABLE部分。

相关问题