【问题标题】:Is it required to execute 'ROLLBACK' upon error?是否需要在出错时执行“回滚”?
【发布时间】:2017-06-25 18:12:47
【问题描述】:

我是 PostgreSQL/libpq 的新手。所以请帮助我澄清我的困惑:

假设我首先执行“START TRANSACTION”并进行正确的错误检查 (PQresultStatus(res) != [proper_success_value]),如果在插入后出现问题,是否需要执行“ROLLBACK”?例如:

  • 开始交易:确定
  • 插入..:好的
  • 更新..:失败

在这种情况下,我是否需要在“更新”失败后执行“回滚”?另外,如果 'ROLLBACK' 也失败了怎么办?

【问题讨论】:

    标签: database postgresql transactions libpq


    【解决方案1】:

    这真的最好通过阅读手册来理解:

    https://www.postgresql.org/docs/current/static/tutorial-transactions.html

    ROLLBACK TO 是重新获得对因错误而被系统置于中止状态的事务块的控制权的唯一方法,而不是将其完全回滚并重新开始。

    回滚应该不会失败。

    交易处于中止状态,这意味着您无法在该交易中继续执行任何操作。您可以使用保存点来恢复该事务,但除此之外您所能做的就是回滚。

    【讨论】:

    • 如果我理解正确,在回滚并完成正在进行的事务之前,我将无法实际执行其他命令?这是否也意味着在失败时,在执行回滚/提交之前不会终止正在进行的事务?
    • 是的,我相信。请记住,关闭数据库连接将隐式回滚任何打开的事务。
    猜你喜欢
    • 2012-07-10
    • 2011-08-25
    • 1970-01-01
    • 1970-01-01
    • 2016-01-01
    • 1970-01-01
    • 2010-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多