在上一篇中文章简单的介绍了普通事物提交状态,并同时介绍了pg_xcat目录。
今天我们继续介绍子事物。
首先介绍一下事物(来自官方手册):

PostgreSQL数据库实际上将每一个SQL语句都作为一个事务来执行。如果我们没有发出BEGIN命令,则每个独立的语句都会被加上一个隐式的BEGIN以及(如果成功)COMMIT/END(如果失败ROLLBACK)来包围它。一组被BEGIN和COMMIT/END/ROLLBACK包围的语句也被称为一个事务块。
当然这是我们最常见的PostgreSQL事务,除此之外PostgreSQL中还有子事务、多事务和2PC事务的概念。
什么是子事物?最简单的子事物是会伴随着savepoint出现的,我们看下面的例子:

在同一个事务中插入的三条记录在事物中ID是一致,但是提交后我们看到三条记录拥有不同的事务ID,这其中第一个事务766是父事务也就是我们开始看到的ID,767、168是子事务。子事务同时也是一个特殊的普通事务,他们也有提交状态,也会将状态刷写到pg_xact目录中,在766父事务提交或者abort后,这些子事务的行为与普通事务一致。

pg_subtrans目录下记录子事物的父事务ID信息,子事物根据父事务的提交状态判断子事务的提交状态。
如果父事务的提交状态是已提交状态,那么子事务为已提交状态;
如果父事务的提交状态是为其他情况时,则都是未提交状态。
今天就写到这,后续会继续介绍多事物和2PC事物,同时介绍pg_multixact与pg_twophase目录。
文章转载自PostgreSQL数据库工作学习随笔,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




