1
我会先介绍一下这个场景,因为我可能会让问题过于复杂,如果是的话,我会删除这个问题。如何在AWS 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;
或者我应该CREATE TABLE
前移到BEGIN;
来?如果我理解正确,通过这样做,如果drop/rename中存在错误,即使create命令也会回滚,对吗?因为这不是必需的。
接受此答案和+1。我知道这很简单,但我必须小心。是的,我同意你的看法。但是,我几乎没有对企业如何要求其流程表现出任何意见。由于每天都有可能检查表格,我想这样做可以正常工作。然而,一个可预见的问题是,如果删除/重命名失败,并且临时表会持续到第二天,这肯定会在重新创建时导致错误。但是,针对'pg_table_def'的检查将避免这种情况。这是我必须承认的,我们所说的整个过程都是错综复杂的。 :) – Manhattan