PostgreSQL的源代码可以随意获得,其开源协议也允许研究者任意修改,这里介绍一下PostgreSQL的源码结构以及部分实现机制。下载PostgreSQL源代码并减压后,其一级目录结构如下图:
PostgreSQL源代码一级结构
其中config目录下存放一些系统的配置文件。contrib目录下包括一些没有集成到核心代码中的外围工具和一些实验性质的开发代码。doc目录下是帮助文档,由SGML编写。src为系统核心代码,其他文件属于编译安装相关文件。 src目录,各子目录及其对应内容如下表:
PostgreSQL源代码src目录下的子目录结构
backend |
数据库引擎代码,也称为后台程序代码。 |
bin |
外围工具,如数据库连接工具psql等。 |
include |
头文件目录。 |
interface |
系统提供的对外接口,如libpq。 |
makefiles |
平台相关的makefile文件。 |
pl |
过程语言PL/PostgreSQLSQL等实现代码。 |
port |
平台兼容处理模块。 |
template |
针对不同平台的编译脚本模板。 |
test |
回归测试用例和自动化测试框架。 |
timezone |
时区相关代码和数据。 |
tools |
辅助工具,如编译windows版本的脚本。 |
tutorial |
系统提供的部分示例示例。 |
系统的核心实现代码都位于src\backend这个目录
Access |
数据存取层,包括表数据索引的操作以及事务相关代码。 |
bootstrap |
数据库初始化模块,和src\bin\initdb下的代码密切相关 |
catalog |
系统表的操作相关代码。 |
commands |
SQL命令执行,包括vacuum、copy、alter等。 |
executor |
SQL语句执行,包括select、insert、update和delete语句的执行。 |
foreign |
FDW(Foreign Data Wrapper)处理相关代码 |
lib |
公用库,包含几个通用的程序。 |
libpq |
前后端通信处理相关代码。 |
main |
系统主入口函数,负责将控制转到postmaster或postgres。 |
nodes |
节点相关代码,节点是查询计划中的存储单元。 |
optimizer |
查询优化相关代码,负责创建查询路径和查询计划。 |
parser |
SQL语句解析模块。 |
po |
国际化(i18n)处理模块 |
port |
平台兼容处理模块。 |
postmaster |
主进程postmaster相关代码。 |
regex |
正则表达式处理模块。 |
replicatI/On |
streaming replicatI/On相关代码。 |
rewrite |
规则系统(rule)模块。 |
snowball |
分词程序,用于实现全文检索。 |
storage |
存储层模块,包括存储管理器、缓冲区管理、文件管理、锁管理等。 |
tcop |
SQL命令分发模块,负责调用parser、optimizer、executor和commands中的函数。 |
tsearch |
全文检索模块。 |
utils |
一些辅助程序,如内建数据类型、错误报告、排序实现等相关代码。 |