【问题标题】:Transaction roll back not working in Postgresql事务回滚在 Postgresql 中不起作用
【发布时间】:2014-01-15 05:57:02
【问题描述】:

我正在开发 PostgreSQL 9.1.4。

我将数据插入到 2 个表中,它运行良好。

我希望为我的两个表都存在的表应用事务 相同的数据库。如果我的第二张桌子在那一刻失败,我的第一张桌子 表应该回滚。

我尝试将“max_prepared_transactions”中的属性设置为非零 /etc/postgres/postgres.conf 中的值。但仍然交易卷 后退不工作。

【问题讨论】:

  • 这没有多大意义。请显示您正在运行的代码,以及任何错误消息。
  • 也许你没有关闭自动提交?
  • @a_horse_with_no_name:您的评论在当时可能是有效的,但据我了解,现在既不需要也不可能关闭自动提交:stackoverflow.com/a/17936997

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


【解决方案1】:

在 postgresql 中,您不能在函数内显式编写提交或回滚。 我认为您可以使用开始结束块 写的简单吧

BEGIN;
   insert into tst_table values ('ABC');
   Begin
    insert into 2nd_table values ('ABC');
   EXCEPTION
    when your_exception then
    ROLL BACK;
   END;
END;

【讨论】:

    【解决方案2】:

    可能你没有开始交易。

    请尝试

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

    【讨论】:

      【解决方案3】:

      我觉得会有帮助

        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
      

      【讨论】:

      • 首先,这不是 postgresql 代码。其次,即使是,也与问题无关,甚至没有关闭
      • 这是 Microsoft SQL Server 语法
      猜你喜欢
      • 2011-01-17
      • 1970-01-01
      • 2017-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-23
      相关资源
      最近更新 更多