在postgres中设置事务回滚的默认值

5us2dqdw  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(341)

如果事务被回滚,是否可以将表行字段设置为某个默认值?
考虑这样一个场景,表中的每一行都运行一个任务,该任务应该修改 state 根据实际任务状态设置字段。因此,首先任务将用 state=running ,然后它将开始一个事务,执行一些处理并用 state=complete . 处理完成后,任务提交事务和 complete 状态变为可见。但是,如果任务突然失败(假设停电),事务将回滚,状态保持不变 running 永远。是否可以设置默认值,如 failed 在这种情况下会用它吗?
我对在postgres中这样做特别感兴趣,但我很乐意了解在任何数据库中这是否可行,或者可以做些什么来达到这样的效果。
编辑:
换句话说,我需要进行两个并发的、互斥的事务,这样如果一个失败,那么另一个就被提交。或者,可以将其视为具有持久保存点的两阶段事务。

bvjxkvbb

bvjxkvbb1#

您可以使用保存点:

START TRANSACTION;

SAVEPOINT a;

/* do some work */

UPDATE atable SET state = 'complete' WHERE ...;

COMMIT;

现在,如果有错误,您将捕获该错误并执行

ROLLBACK TO SAVEPOINT a;

UPDATE atable SET state = 'failed' WHERE ...;

COMMIT;

相关问题