我们有一个表来记录系统上发生的处理,我们需要确保只有一行处于“处理中”状态。
我想确保结果始终为零或一:
select count(id) from jobs where status in ('P', 'G');
Run Code Online (Sandbox Code Playgroud)
我们正在使用显式事务,因此理想情况下,此检查将在提交时进行,如果不变量不成立则中止事务。对于我们来说,处理任何偶尔会引发错误的异常处理比突然以多个“正在进行”的工作结束要容易得多。
该解决方案只需要与 Postgres 一起使用,因此我们很乐意为此采用非标准解决方案。我们目前使用 8.4,但如果有任何不同,我们将在某个时候升级到 9.x。
postgresql constraint transaction data-integrity postgresql-8.4