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

问题描述 投票:0回答:1

如果事务回滚,是否可以将表行字段设置为某个默认值?

考虑一种情况,其中对于表中的每一行都运行一个任务,该任务应根据实际任务状态修改state字段。因此,首先该任务将使用state=running更新该行,然后它将开始一个事务,进行一些处理并使用state=complete更新该行。处理完成后,任务将提交事务,并且complete状态变为可见。但是,如果任务突然失败(想象中的电源故障),则事务将回滚,并且状态永远保持为running。是否可以设置在这种情况下将使用的默认值,例如failed

我对在Postgres中执行此操作特别感兴趣,但我很高兴了解在任何数据库中是否可以做到这一点,或者可以做些什么来达到这种效果。

编辑:换句话说,我需要进行2个并发的,互斥的事务,以便如果其中一个失败,则提交另一个事务。或者,可以将其视为具有持久保存点的两阶段事务。

sql postgresql transactions rollback
1个回答
0
投票

您可以使用的一件事是保存点:

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;
© www.soinside.com 2019 - 2024. All rights reserved.