繁体   English   中英

事务回滚在Postgresql中不起作用

[英]Transaction roll back not working in Postgresql

我正在使用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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM