Postgresql中的事务回滚无法正常工作

3
我正在使用PostgreSQL 9.1.4。
我成功地向2个表中插入了数据。
我希望为我的这两个位于同一数据库的表应用事务管理。如果第二个表在任何时候发生错误,那么第一个表应该回滚。
我尝试将“/etc/postgres/postgres.conf”文件中的“max_prepared_transactions”属性设置为非零值,但是事务回滚仍然没有生效。

4
请展示你所运行的代码和任何错误信息。这段话原意不应有太大问题。 - undefined
1
可能您没有关闭自动提交? - user330315
@a_horse_with_no_name: 你的评论可能在当时是有效的,但据我了解,现在既不需要也不可能关闭自动提交:http://stackoverflow.com/a/17936997 - undefined
3个回答

6

在PostgreSQL中,您不能在函数内显式地编写commit或rollback语句。我认为您可以使用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;

3
也许您还没有开始事务。
请尝试:
BEGIN;
  INSERT INTO first_table VALUES(10);

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

ROLLBACK;

-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

5
首先,这不是PostgreSQL的代码。其次,即使是,它也与问题无关,甚至毫不相干。 - undefined
这是 Microsoft SQL Server 的语法 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接