我想從暫存表中將數據插入表中,但是如果發生錯誤則保持數據不變。什麼是在Postgres中回滾事務的好方法
我已經是一個愉快的合作路徑
Begin transaction;
DELETE FROM mytable;
INSERT INTO mytable SELECT * FROM mytable_staging ;
Commit transaction;
如果插入語句失敗我怎麼能回滾事務?
我想從暫存表中將數據插入表中,但是如果發生錯誤則保持數據不變。什麼是在Postgres中回滾事務的好方法
我已經是一個愉快的合作路徑
Begin transaction;
DELETE FROM mytable;
INSERT INTO mytable SELECT * FROM mytable_staging ;
Commit transaction;
如果插入語句失敗我怎麼能回滾事務?
PostgreSQL事務將自動回滾出錯,請參閱this。
原子性 - 確保工作單位中的所有操作都 成功完成;否則,交易將在 故障點中止,並且以前的操作將回滾到其原來的狀態 。
一致性 - 確保數據庫在 成功提交的事務中正確更改狀態。
隔離 - 使交易獨立運作,並且 彼此透明。
耐用性 - 確保在發生系統故障時承諾的事務的結果或效果持續存在。
可以使用ROLLBACK [WORK | TRANSACTION]
語句回滾一個Postgres交易:
Begin transaction;
DELETE FROM mytable;
INSERT INTO mytable SELECT * FROM mytable_staging ;
Rollback transaction;
所有的SQL命令是不區分大小寫和語句的transaction
部分是可選的,但我喜歡把它列入了清晰度。
哪一個呢? Redshift或Postgres?但通常來說,回滾一個事務,你使用'rollback' –
這是Amazon Redshift –