是否可以回滚到“已提交的保存点”?
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时触发事务提交异常(我相信某些删除违反了外键约束),但是只有在事务A中完成的工作才被提交。
问题已解决,事务B将提交。 但是这样做,A和B都会在数据库中留下一些副产品。 如果下一次测试应该有成功的机会,那么现在需要从数据库中清除这些信息。
手动跟踪这些副产品非常困难,因此事务C应该删除这些副产品。