事务回滚在Postgresql中不起作用

时间:2014-01-15 05:57:03

标签: sql postgresql postgresql-9.1 phppgadmin php-pgsql

我正在研究PostgreSQL 9.1.4。

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

我希望为我的表应用事务,两个表都存在于  相同的DB。如果我的第二张表在那个时间我的第一个时刻失败了  表应该回滚。

我尝试将“max_prepared_transactions”中的属性设置为非零  /etc/postgres/postgres.conf中的值。但仍然是交易滚动  回来了。

3 个答案:

答案 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