2014-01-15 109 views
1

我正在使用PostgreSQL 9.1.4。事務回滾無法在Postgresql中工作

我將數據插入到2個表格中,它的工作很好。

我希望爲我的表申請交易兩個表都存在 相同的數據庫。如果我的第二張桌子在任何時刻都會失敗,那麼我的第一張桌子應該是回滾的。

我試過「max_prepared_transactions」中的屬性爲/etc/postgres/postgres.conf中的非零 值。但仍交易滾 回不起作用。

+4

這並沒有太大的意義。請*顯示您正在運行的代碼*以及任何錯誤消息。 –

+1

也許你沒有關閉自動提交? –

+0

@a_horse_with_no_name:您的評論當時可能是有效的,但從我的理解中,現在關閉自動提交既不需要也不可能:http://stackoverflow.com/a/17936997 – ssc

回答

2

在PostgreSQL裏你不能寫提交或函數中回滾明確。 我想你可以有使用開始結束塊 只寫簡單

BEGIN; 
    insert into tst_table values ('ABC'); 
    Begin 
    insert into 2nd_table values ('ABC'); 
    EXCEPTION 
    when your_exception then 
    ROLL BACK; 
    END; 
END; 
-3

我認爲這將是有益的

create proc DataInsertInTable 
    as 
    begin tran 

    insert into Table1 values('Table1Data','XYZ') 
    if(@@ERROR <>0) 
    begin 
     rollback tran; 
     return 0 
    end 
    insert into Table2 values('Table2Data','ABC') 
    if(@@ERROR <>0) 
    begin 
     rollback tran; 
     return 0 
    end 
    commit Tran 
    return 1 
+1

首先,這不是postgresql代碼。其次,即使是這樣,它與問題無關,甚至沒有關係 – mvp

1

也許你沒有啓動的事務。

請嘗試

BEGIN; 
    INSERT INTO first_table VALUES(10); 

    -- second insert should fail 
    INSERT INTO second_table VALUES(10/0); 

ROLLBACK;