2

我正在研究 PostgreSQL 9.1.4 。

我将数据插入到 2 个表中,它工作得很好。

我希望为我的表应用事务,这两个表都存在于同一个数据库中。如果我的第二张桌子在任何时候失败,我的第一张桌子应该回滚。

我尝试将“max_prepared_transactions”中的属性设置为/etc/postgres/postgres.conf. 但仍然事务回滚不起作用。

4

3 回答 3

5

在 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;
于 2014-01-17T11:07:23.473 回答
2

可能你没有开始交易。

请试试

BEGIN;
  INSERT INTO first_table VALUES(10);

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

ROLLBACK;
于 2014-01-15T13:22:03.930 回答
-8

我认为这会有所帮助

  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
于 2014-01-15T06:37:00.060 回答