postgreSQL——事务分析2

目录

概述

函数概述

函数分析

(1)StartTransactionCommand函数

(2)CommitTransactionCommand函数

(3)AbortCurrentTransaction

总结


2021SC@SDUSC

上一篇分析了postgreSQL实现的总体概述,这个周想要分析一下针对事务处理的上层有关事务具体实现的函数解析。

​​​​​​​

概述

在postgreSQL中,一个事务块包含多个事务,所以事务块的状态数量要比底层事务的状态数量多的多。

在postgreSQL的事务处理层次中,位于事务系统上层的是事务块。postgreSQL执行一条语句前会调用StartTransactionCommand函数,执行结束时会调用CommitTransCommand函数。如果命令执行失败,则会调用AbortCurrentTransaction函数。上述三个函数根据事务块的状态执行不同的操作,并调用不同的底层事务执行函数。

postgreSQL将事务系统分成上层(事务块)和底层(事务),通过分层设计,在处理上层事务时可以屏蔽具体的细节。

但是这三个函数只是事务系统上层的入口函数,并不处理具体事务。

函数概述

经过查看文档,在postgreSQL中,任何语句的执行都是通过事务块入口函数进入并执行的,执行完毕后,通过事务块出口函数退出。

事务块基本操作函数包括StartTransactionCommand,CommitTransactionCommand,AbortCurrentTransaction。其中,StartTransactionCommand在每条语句执行前调用,CommitTransactionCommand在每条语句执行后调用,AbortCurrentTransaction则在系统遇到错误时调用。

函数分析

(1)StartTransactionCommand函数

我在查看postgreSQL相关文档后发现,在postgreSQL中,每条语句执行前,都需要执行该函数,它的作用是通过判断当前事务块的状态进入不同的底层事务执行函数中。由此分析得出,它是进入事务处理模块的入口函数,直接在总控模板中被调用。

经查询可知:该函数根据当前事务块的状态决定下一步操作的方向。例如,假设当前事务块的状态为TBLOCK_DEFAULT,name调用该函数时说明当前系统中还不存在失误,于是调用底层事务操作函数启动一个事务,并设置事务块的状态为TBLOCK_STARTED。

(2)CommitTransactionCommand函数

在postgreSQL中,每条语句执行前,都需要执行该函数,它同StartTransctionCommand一样,也是根据当前事务块的状态决定下一步的事务操作。只不过他在每条语句执行结束后调用。

下面举例书名该函数的执行过程。假设当前事务块的状态为TBLOCK_DEFAULT,调用该函数时说明此时系统没有任何事务信息,我们知道postgreSQL中的任何语句都是在事务中执行的,而该函数又在执行语句后调用,说明现在处于一个非法状态,于是打印错误消息并返回。

(3)AbortCurrentTransaction

在postgreSQL中,遇到错误时,会返回到调用点并执行该函数,起作用也是根据当前事务块的状态决定下一步的事务操作。只不过该函数在系统遇到错误时调用,其中可能进行事务出错退出操作或者事务清理操作。

假设当前事务块的状态为TBLOCK_DEFAULT,如果系统执行遇到错误,那么会返回到sigsetjmp函数,然后调用该函数进行出错处理。如果底层事务的状态为TRANS_DEFAULT,那么说明此时系统中没有任何事物信息,不需要进行事务出错处理,直接返回即可;若当前底层事务状态为TRANS_START,说明此时底层事务已经存在,现在退出事务块需要调用AbortCurrentTransaction函数,在调用CleanupTransaction函数进行事务清理操作。

总结

这周分析了postgreSQL事务处理的上层事务块的几个重要的函数,下周打算具体分析事务相关的底层事务。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值