错误时需要执行“ ROLLBACK”吗?

Aca*_*arX 5 database postgresql transactions libpq

我是PostgreSQL / libpq的新手。因此,请帮助我澄清我的困惑:

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

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

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

Phi*_*ing 9

通过阅读手册可以最好地理解这一点:

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

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

回滚应该不会失败。

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

  • 如果我理解正确,在回滚并完成正在进行的事务之前,我将无法实际执行其他命令?这是否也意味着在失败时,在执行回滚/提交之前不会终止正在进行的事务? (2认同)
  • 是的,我相信如此。请记住,关闭数据库连接将隐式回滚任何打开的事务。 (2认同)