2.6 服务进程Postgres
Postgres进程是实际的接受查询请求并调用相应模块处理查询的PostgreSQL服务进程。它直接接受用户的命令进行编译执行,并将结果返回给用户。如此循环,直到用户断开连接。用户的命令分为两种:一种是查询命令,即插入、删除、更新和选择四种命令。另一种是非查询命令,如创建/删除表、视图、索引等命令。服务进程Postgres根据不同的命令类型选择不同的策略进行处理。
从前面Main主程序的执行流程图(见图2-3)中可以看出,Postgres的启动方式有两种:一种是在Postmaster监控下,动态地被Postmaster创建为用户服务,这是一种多用户的服务方式,也是比较通常的启动方式;另外一种是不经过Postmaster以单用户模式直接启动,为单一用户提供服务,这种方式由--single选项启动。在这种模式下,Postgres服务器进程必须自己完成初始化内存环境、配置参数等操作,而这些操作在多用户模式下是由Postmaster服务器进程完成的。
Postgres进程的主要源代码文件位于src/backend/tcop文件夹下,主要文件包括:
服务进程的源代码文件postgres.c,它是Postgres的入口文件,负责管理查询的整体流程。
对于查询命令进行处理的源代码文件pquery.c,它执行一个分析好的查询命令。
对于非查询命令进行处理的源代码文件utililty.c,它执行各种非查询命令。
dest.c中的代码主要处理Postgres和远端客户的一些消息通信操作,并负责返回命令的执行结果。
Postgres进程的入口是位于postgres.c文件中的PostgresMain函数,其工作流程如图2-15所示。下面将对PostgresMain函数进行详细介绍。
(点击查看大图)图2-15 PostgresMain函数流程图 |
【责任编辑:云霞 TEL:(010)68476606】