2011-06-10 85 views
5

我想知道postgres可以在事務內部安全地處理什麼,但是我找不到postgres manual中的相關信息。到目前爲止,我已經找到了以下工作:在postgres中支持什麼事務

  • UPDATEINSERTDELTE完全支持內部交易和回滾時,交易未完成
  • DROP TABLE是不是一個事務內部安全處理,並撤消與一個CREATE TABLE,從而重新創建刪除的表,但不重新填充
  • CREATE TABLE也沒有真正transactionized,並與相應的DROP TABLE
0而不是撤消

這是正確的嗎?此外,我無法找到有關處理ALTER TABLETRUNCATE的提示。這些交易以什麼方式處理,並且在交易中是否安全?不同類型的交易和不同版本的postgres之間的處理有什麼不同?

回答

6

DROP TABLE交易。爲了解決這個問題,你需要發出一個ROLLBACK而不是CREATE TABLE。這同樣適用於CREATE TABLE(這也是使用ROLLBACK撤消的)。

ROLLBACK始終是撤消事務的唯一正確方法 - 包括ALTER TABLE和TRUNCATE。

在Postgres中永遠不會事務性的唯一的事情是由序列生成的數字(CREATE/ALTER/DROP SEQUENCE本身雖然是事務性的)。

+0

是的,我的意思是它在內部處理的方式...猜猜我只是被一些[這個問題]的答案困惑(http://stackoverflow.com/questions/4692690/is-it-possible-to- roll-back-create-table-and-alter-table-statements-in-major-sql) – LiKao 2011-06-10 13:39:34

+0

@LiKao:鏈接問題中的答案沒有專門討論PostgreSQL。對於不支持事務性DDL的DBMS來說,DROP TABLE不僅可以通過CREATE TABLE「回滾」,這是事實。 – 2011-06-10 13:40:57