我正在研究 PostgreSQL 9.1.4 。
我将数据插入到 2 个表中,它工作得很好。
我希望为我的表应用事务,这两个表都存在于同一个数据库中。如果我的第二张桌子在任何时候失败,我的第一张桌子应该回滚。
我尝试将“max_prepared_transactions”中的属性设置为/etc/postgres/postgres.conf
. 但仍然事务回滚不起作用。
我正在研究 PostgreSQL 9.1.4 。
我将数据插入到 2 个表中,它工作得很好。
我希望为我的表应用事务,这两个表都存在于同一个数据库中。如果我的第二张桌子在任何时候失败,我的第一张桌子应该回滚。
我尝试将“max_prepared_transactions”中的属性设置为/etc/postgres/postgres.conf
. 但仍然事务回滚不起作用。
在 postgresql 中,您不能在函数内显式编写提交或回滚。我认为您可以使用 begin end 块只需简单地编写
BEGIN;
insert into tst_table values ('ABC');
Begin
insert into 2nd_table values ('ABC');
EXCEPTION
when your_exception then
ROLL BACK;
END;
END;
可能你没有开始交易。
请试试
BEGIN;
INSERT INTO first_table VALUES(10);
-- second insert should fail
INSERT INTO second_table VALUES(10/0);
ROLLBACK;
我认为这会有所帮助
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