暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PostgreSQL的事务之子事务介绍

PostgreSQL数据库工作学习随笔 2021-11-10
1078

    在上一篇中文章简单的介绍了普通事物提交状态,并同时介绍了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_multixactpg_twophase目录




文章转载自PostgreSQL数据库工作学习随笔,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论