我看到另一个数据库系统提供了暂停事务的功能。当前的事务保持不变,但是在您的代码允许与数据库交互以对行进行立即永久更改时被暂停。然后,您可以恢复事务,继续之前离开的地方,具有相同的锁定和其他事务保护,就像您从未中断过一样。例如,假设客户正在进行交易下订单。在该交易期间,客户注意到他们的电话号码需要更新,因此我们更改了该数据。接下来,客户决定取消尚未完成的订单。订单回滚会意外地撤消电话号码更改。因此,如果我们能够: 暂停订单的事务。 更新电话号码,提交到数据库。 恢复订单的事务。 在Postgres中是否有一种暂停事务的方法?在JDBC中是否有一种暂停事务的方法?
不是的。 最接近的可能是 准备事务:这允许(在某些条件下)保存事务,然后稍后回滚或提交。 保存点:这允许“嵌套事务”,其中事务的某些部分可以回滚。 但这两个都不完全符合您的要求。看起来我们的示例有两个操作根本不需要成为同一事务的一部分,因为更新电话号码似乎与订单成功无关。(此外,长时间运行的事务是个坏主意...您的订单应该是一个实现了无需长时间运行事务的状态机。)
如果事务无法继续,它必须回滚。 如果您的事务在某个点上不知道如何继续,则您的事务逻辑存在缺陷,需要重新组织它 - 要么拆分成多个事务(或子事务,也称为保存点),要么取出不属于事务逻辑的部分。 有没有一种方法可以在Postgres中暂停事务? 不,没有这样的东西。数据完整性原则是无条件的。