初始化部分(Initialization)
bootstrap:和系统表相关。
main:传递参数到后台的pg进程。
postmaster:控制pg服务开关,创建共享内存,循环等待连接并分配服务。
libpq:与子进程通讯相关的库。
tcop:交警,分配请求到对应模块如解析器、优化器、执行器和命令行功能。
parser:把sql语句转化成查询执行树。
rewrite:规则和视图支持部分。
optimizer:优化查询路径生成计划。
optimizer_geqo:遗传(或者是祖传?)查询优化器评估的路径对于要连接的表,当表的数量很少时会给很优化的结果,表太大就直接给一个一般的,可以通过参数控制是否使用这个功能。
optimizer_plan:拿着“optimizer_path”的结果输出最小开销的路径。
optimizer_prep:处理特殊的查询计划。
optimizer_util:优化支持部分。
executor:执行复杂的计划包括,增删改查。算子举例:堆扫描、索引扫描、排序、连接、聚合、分组、去重等。
commands:响应指令,以及简单的功能如vacuum、create table直接在元数据(catalog)上面做了。
catalog:元数据,直接操作系统表和目录,如索引、表、存储过程、操作符等。
access:大量的数据访问函数,如索引访问、堆访问、和事务日志。
access_common:通用访问方法。
access_gin:索引相关访问。
access_gist:搜索树相关访问。
access_hash:哈希相关访问方法。
access_heap:存储数据行。
access_index:被索引类型使用。
access_nbtree:Lehman和Yao的B树管理算法。
access_spgist:空间分片的全局特征信息相关访问。(GiST)
access_transam:事务管理,如日志读写。(BEGIN/ABORT/COMMIT)
nodes:关于SQL查询的创建或者操作叫做节点,节点一般都有类型和特殊的数据结构,节点间经常被放在链表里。
storage:管理大量存储系统,提供统一后台访问。
storage_buffer:共享缓存管理。
storage_file:文件管理。
storage_freespace:剩余空间映射表。
storage_ipc:信号量和共享内存。
storage_large_object:超大对象。
storage_lmgr:锁管理。
storage_page:页管理。
storage_smgr:磁盘和存储设备管理。
utils:工具类。
utils_adt:包含所有PG中內建数据类型(如bool、char、date)。
utils_cache:因为PG支持很多随意数据类型,后台系统需要查询一个系统表关于这些随意类型时会先走这个缓存。
utils_error:错误反馈,从后端反馈到前端去。
utils_fmgr:函数管理,处理动态绑定的函数调用,和系统表中定义的函数调用。
utils_hash:哈希函数管理,被缓存和内存管理器使用以做快速查询动态数据存储结构。
utils_init:大量初始化。
utils_mb:单字节和多字节的编码。
utils_misc:冗余的东西(官方叫miscellaneous stuff)
utils_mmgr:内存管理(PG进程本地)。
utils_resowner:资源拥有者追溯。
utils_sort:排序工具,如对元祖排序。
utils_time:事务时间,与mvcc有关,判断一个元祖是过期了还是未提交。
基础支持(Support Facilities)
include:引用的文件。
lib:支持的库,大致看了下有二插堆,布隆过滤器。
port:兼容性部分。
regex:正则表达式。
snowball:语法库,雪球是一个语法库,各国语言的规范都有。
replication:通过日志迁移支持流式备份。
tsearch:文本查询库用于支持全文查询。