2.6.5 创建内存上下文并设置查询取消跳跃点
Postgres首先创建一个名为MessageContext的内存上下文,该内存上下文用于存储从前端发送过来的消息中的查询命令,以及在查询过程中产生的中间数据(例如在简单查询模式时产生的分析树和计划树),每当PostgresMain进行下一次循环(即进行新的查询)时该内存上下文将被重设,即所有经过MessageContext分配的内存块将被释放。
创建完成后将调用sigsetjmp(系统调用函数)设置跳跃点,当客户端取消一次查询请求或发生错误时,将通过调用siglongjmp利用全局变量PG_exception_stack(该变量是指向跳跃点的指针)从这个点退出当前事务然后重新开始查询,在错误恢复期间不允许被中断,也不接受任何客户端取消查询的请求(正在取消)。
PostgreSQL使用的这种错误恢复的方式是C语言程序中进行错误处理的一种常见方式,具体细节可以参考C语言的相关资料。
【责任编辑:云霞 TEL:(010)68476606】