暂停Postgres中的交易

时间:2017-06-11 06:11:19

标签: postgresql transactions suspend

我见过另一个提供暂停transaction的数据库系统。当前事务保持不变但保持不变,同时允许您的代码使用数据库以立即对行进行永久性更改。然后你就可以恢复交易,继续你离开的地方,使用相同的锁和其他交易保护,就好像你从未打断它一样。

例如,假设客户在交易中下订单。在该交易期间,客户注意到他们的电话号码需要更新,因此我们更改了这些数据。接下来,客户决定取消尚未完成的订单。订单的回滚会产生意外的后果,即撤消电话号码更改。如果我们能够这样做会很好:

  1. 暂停订单的交易。
  2. 更新已提交至数据库的电话号码。
  3. 恢复订单的交易。
  4. 有没有办法暂停Postgres中的交易?在JDBC

3 个答案:

答案 0 :(得分:1)

如果交易无法继续,则必须回滚。

如果您的交易有一个您不知道如何继续进行交易的点,那么您的交易逻辑是有缺陷的,您需要对其进行重组 - 要么拆分成多个交易(或子交易,又称保存点) ),或取出不属于交易逻辑的部分。

  

有没有办法暂停Postgres的交易?

不,没有这样的事情。数据完整性原则对于时间是无条件的。

答案 1 :(得分:1)

否。

最近的东西是

  • prepared transactions:这允许(在某些情况下)保存交易,然后稍后回滚或提交。

  • savepoints:这允许“嵌套交易”,其中部分交易可以回滚。

这些都不完全符合您的需求。看来我们的示例中有两个操作根本不需要属于同一笔交易,因为电话号码更新似乎与订单的成功无关。 (而且,长时间运行的事务不是一个好主意。...您的订单应该是在没有长时间运行的事务的情况下实现的状态机。)

答案 2 :(得分:0)

解决方法 - 打开第二个连接

在JDBC中,您只需打开与数据库的第二个连接即可。

在第二个连接上单独完成工作并关闭。第一个连接仍处于打开状态并保持相同状态。第一个连接中的任何活动事务仍然存在。