Jer*_*ino 2 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;
Run Code Online (Sandbox Code Playgroud)
或者我应该搬到BEGIN;之前CREATE TABLE?如果我理解正确的话,通过这样做,如果删除/重命名中出现错误,即使创建命令也会回滚,对吧?因为这不是所需要的。
你的推理是正确的。
由于 Redshift 支持事务性 DDL 语句,因此它将按预期工作。我的意思是失败的事务中的所有内容都将被回滚。
说实话……提出的要求似乎没有任何意义。保留临时表的原因可能是什么?
对我来说,正确的做法是参与CREATE TABLE交易。
| 归档时间: |
|
| 查看次数: |
9616 次 |
| 最近记录: |