我正在研究PostgreSQL 9.1.4。
我将数据插入到2个表中,并且工作得很好。
我希望为我的表应用事务,两个表都存在于 相同的DB。如果我的第二张表在那个时间我的第一个时刻失败了 表应该回滚。
我尝试将“max_prepared_transactions”中的属性设置为非零
/etc/postgres/postgres.conf
中的值。但仍然是交易滚动
回来了。
答案 0 :(得分:3)
在postgresql中,您无法在函数中显式写提交或回滚。 我想你可以使用一个开始结束块 只写简单
BEGIN;
insert into tst_table values ('ABC');
Begin
insert into 2nd_table values ('ABC');
EXCEPTION
when your_exception then
ROLL BACK;
END;
END;
答案 1 :(得分:1)
可能你没有开始交易。
请尝试
BEGIN;
INSERT INTO first_table VALUES(10);
-- second insert should fail
INSERT INTO second_table VALUES(10/0);
ROLLBACK;
答案 2 :(得分:-4)
我认为这会有所帮助
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