我正在使用PostgreSQL 9.1.4。事務回滾無法在Postgresql中工作
我將數據插入到2個表格中,它的工作很好。
我希望爲我的表申請交易兩個表都存在 相同的數據庫。如果我的第二張桌子在任何時刻都會失敗,那麼我的第一張桌子應該是回滾的。
我試過「max_prepared_transactions」中的屬性爲/etc/postgres/postgres.conf
中的非零 值。但仍交易滾 回不起作用。
我正在使用PostgreSQL 9.1.4。事務回滾無法在Postgresql中工作
我將數據插入到2個表格中,它的工作很好。
我希望爲我的表申請交易兩個表都存在 相同的數據庫。如果我的第二張桌子在任何時刻都會失敗,那麼我的第一張桌子應該是回滾的。
我試過「max_prepared_transactions」中的屬性爲/etc/postgres/postgres.conf
中的非零 值。但仍交易滾 回不起作用。
在PostgreSQL裏你不能寫提交或函數中回滾明確。 我想你可以有使用開始結束塊 只寫簡單
BEGIN;
insert into tst_table values ('ABC');
Begin
insert into 2nd_table values ('ABC');
EXCEPTION
when your_exception then
ROLL BACK;
END;
END;
我認爲這將是有益的
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
首先,這不是postgresql代碼。其次,即使是這樣,它與問題無關,甚至沒有關係 – mvp
也許你沒有啓動的事務。
請嘗試
BEGIN;
INSERT INTO first_table VALUES(10);
-- second insert should fail
INSERT INTO second_table VALUES(10/0);
ROLLBACK;
這並沒有太大的意義。請*顯示您正在運行的代碼*以及任何錯誤消息。 –
也許你沒有關閉自動提交? –
@a_horse_with_no_name:您的評論當時可能是有效的,但從我的理解中,現在關閉自動提交既不需要也不可能:http://stackoverflow.com/a/17936997 – ssc