database - 是否需要在出错时执行 'ROLLBACK'?

标签 database postgresql transactions libpq

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

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

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

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

最佳答案

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

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

ROLLBACK TO is the only way to regain control of a transaction block that was put in aborted state by the system due to an error, short of rolling it back completely and starting again.

回滚不能失败。

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

关于database - 是否需要在出错时执行 'ROLLBACK'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44749200/

相关文章:

sql - 如何获取由另一列分区的值的第一个实例?

Spring Data REST - 如何同时保存父实体和子实体

mysql - 在大表中每组选择一个随机行

sql-server - 在 C# 中从数据库获取字符串值

当 LocalDate 为 null 时,Java 8 LocalDate JPA 2.2 坚持到 postgresql Date 失败

php - 使用 Movable Type 在服务器上安装 postgres

mysql - 什么样的锁定/事务隔离级别适合这种情况?

sql-server - 事务可以在同一个 SQL Server 中跨多个数据库工作吗?如果是,这是分布式事务吗?

PHPUnit 使用数据集测试方法中的选择

sql - 如何在 DB2 中运行 SQL 并返回漂亮的 XML