PostgreSQL-跨事务边界还原到保存点

是否可以回滚到“已提交的保存点”?

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应该删除这些副产品。

hrbwyj 回答:PostgreSQL-跨事务边界还原到保存点

正如评论中提到的那样,这在PostgreSQL中是不可能的。

您唯一的希望是在包络交易中使用子交易:

BEGIN;
SAVEPOINT before_a;
/* perform the work for A */
/* perform the work for B */

如果B失败,请执行以下操作:

ROLLBACK TO SAVEPOINT before_a;

然后,无论B是否失败:

/* perform the work for C */
COMMIT;
本文链接:https://www.f2er.com/2475446.html

大家都在问