PostgreSQL与MySQL源代码分析之旅(2)上--PG源代码结构
PG的源代码可以从官方网站上下载得到,解压后得到下面几个目录:
- src : 系统代码
- configure:编译脚本代码,PG使用的是autoconfig方式编译
- doc:帮助文档代码,用sgml代码编写
- contrib:目录中包含了一些不属于核心系统的外围工具和一些实验性质的开发尝试。
下面展开src进行进一步的分析:
└─src
├─backend :系统内核代码
│ ├─acces :数据存取层代码,包括堆、各种索引、事务管理
│ ├─bootstrap :数据库bootstrap模式的代码,该模式主要用来初始化模板数据库
│ ├─catalog :系统表
│ ├─commands :DML之外的一些命令
│ ├─executor :执行器
│ ├─foreign :外部表
│ ├─lib
│ ├─libpq :libpq接口,数据库访问的c、c++接口
│ ├─main :各个服务进程的main函数入口
│ ├─nodes :语法树、计划数节点
│ ├─optimizer :优化器
│ ├─parser :词法和语法解析,将查询转换成内部查询树
│ ├─port : 平台兼容处理的相关函数
│ ├─postmaster :就是postmaster
│ ├─regex :正则表达式实现
│ ├─replication :主备双机
│ ├─rewrite :查询重写
│ ├─snowball :第三方分词程序
│ ├─storage :存储管理
│ │ ├─buffer :缓冲区管理
│ │ ├─file :文件句柄管理
│ │ ├─freespace :空闲空间管理
│ │ ├─ipc :进程间通信
│ │ ├─large_object :大对象
│ │ ├─lmgr :锁管理
│ │ ├─page :页面管理
│ │ └─smgr :存储管理
│ ├─tcop :Postgres查询分发,调用Parser、Optimizer、Executor和Commands中的函数来执行查询
│ ├─tsearch :
│ └─utils :各种支撑函数
├─bin :系统外围工具
│ ├─initdb :数据库初始化工具
│ ├─pgevent :
│ ├─pg_basebackup :
│ ├─pg_config :
│ ├─pg_controldata :
│ ├─pg_ctl :数据进程控制工具
│ ├─pg_dump :数据导入导出
│ ├─pg_resetxlog :
│ ├─psql : 数据库客户端工具
│ └─scripts :
├─include :头文件目录
├─interfaces :外部接口
├─makefiles
├─pl :各种过程语言
│ ├─plperl
│ ├─plpgsql : 类似于PLSQL的语法
│ ├─plpython
│ └─tcl
├─port:libpgport库
├─template :编译脚本模板
├─test : 回归测试程序
│ ├─examples
│ ├─isolation
│ ├─locale
│ ├─mb
│ ├─performance
│ ├─regress
│ └─thread
├─timezone
├─tools
└─tutorial
通过分析代码目录结构,可以看出PG目录组织比较工整,核心代码、外围工具代码、文档代码都分门别类的放置于不同的目录下;各个功能模块划分清晰。提供的功能比较完整,支持SQL语言及多种过程型语言、支持正则表达式、支持全文检索、支持跨平台编译。