2017-05-08 74 views
1

我想從暫存表中將數據插入表中,但是如果發生錯誤則保持數據不變。什麼是在Postgres中回滾事務的好方法

我已經是一個愉快的合作路徑

  Begin transaction; 
      DELETE FROM mytable; 
      INSERT INTO mytable SELECT * FROM mytable_staging ; 
      Commit transaction; 

如果插入語句失敗我怎麼能回滾事務?

+1

哪一個呢? Redshift或Postgres?但通常來說,回滾一個事務,你使用'rollback' –

+0

這是Amazon Redshift –

回答

1

PostgreSQL事務將自動回滾出錯,請參閱this

原子性 - 確保工作單位中的所有操作都 成功完成;否則,交易將在 故障點中止,並且以前的操作將回滾到其原來的狀態 。

一致性 - 確保數據庫在 成功提交的事務中正確更改狀態。

隔離 - 使交易獨立運作,並且 彼此透明。

耐用性 - 確保在發生系統故障時承諾的事務的結果或效果持續存在。

0

可以使用ROLLBACK [WORK | TRANSACTION]語句回滾一個Postgres交易:

Begin transaction; 
DELETE FROM mytable; 
INSERT INTO mytable SELECT * FROM mytable_staging ; 
Rollback transaction; 

所有的SQL命令是不區分大小寫和語句的transaction部分是可選的,但我喜歡把它列入了清晰度。