有没有办法回滚到“提交的保存点”?
Afaik,postgresql 支持的实际保存点是子事务,当封闭事务提交或中止时,它们就失去了意义。是否存在跨事务边界的“保存点”?
基本上,我想要的是按顺序执行这三个事务:
交易~A
BEGIN TRANSACTION;
COMMIT SAVEPOINT 'before_a';
DO SOMETHING;
COMMIT TRANSACTION;
交易~B
BEGIN TRANSACTION;
DO SOMETHING_ELSE;
COMMIT TRANSACTION;
交易~C
BEGIN TRANSACTION
ROLLBACK TO COMMITED SAVEPOINT 'before_a'; -- discards work done in A and B
COMMIT TRANSACTION
原因是我正在编写(Java)回归测试。
在错误的情况下,DO SOMETHING_ELSE
尝试提交 B 时会触发事务提交异常(我相信在 DELETE 上违反了一些外键约束),但前提是事务 A 中完成的工作已经提交。
由于问题现已解决,事务 B 将提交。但是这样做,A 和 B 都会在数据库中留下一些副产品。如果下一个测试应该有任何成功的机会,现在需要从数据库中清除这些。
手动跟踪这些副产品非常困难,因此事务 C 应该删除这些副产品。