代码编织梦想

引言(Introduction)

Postgresql是一个跨平台开源且性能良好的关系型数据库,支持标准SQL,多版本并发控制等特性。本人为了增加对数据库原理的认识,特于此地进行记载。本文主要介绍Postgresql的源码文件结构。

文件结构(File System)

PostgreSQL采用C/S(Client-Server)模式,并将客户端称为前端(Frontend),服务器端称为后端(Backend)。后端由多个进程构成,这里先不作介绍。PostgreSQL的文件结构如下:

文件目录		    说明
COPYRIGHT		   版权信息
GUNMakefile		   第一级目录的 Makefile
GUNMakefile.in	    Makefile 的雏形
HISTORY        		修改历史
INSTALL        		安装方法简要说明
Makefile		    Makefile模版
README	        	简单说明
aclocal.m4			config 用的文件的一部分
config/				config 用的文件的目录
configure			configure 文件
configure.in		configure 文件的雏形
contrib/			contribution 程序
doc/	        	文档目录
src/	        	源代码目录

PostgreSQL 的src下面有:

文件目录				说明
DEVELOPERS	        	面向开发人员的注释
Makefile	        	Makefile 
Makefile.global			make 的设定值(从configure生成的)
Makefile.global.in		Configure使用的Makefile.global的雏形
Makefile.port	        平台相关的make的设定值,实际是一个到makefile/Makefile的连接. (从configure生成的)
Makefile.shlib	        共享库用的Makefile
backend/	        	后端的源码目录
bcc32.mak	        	Win32 ポート用の Makefile (Borland C++ 用)
bin/	                psql 等 UNIX命令的代码
include/	        	头文件
interfaces/	        	前端相关的库的代码
makefiles/	        	平台相关的make 的设置值
nls-global.mk	        信息目录用的Makefile文件的规则
pl/	                	存储过程语言的代码
port/	                平台移植相关的代码
template/	        	平台相关的设置值
test/	                各种测试脚本
timezone/	        	时区相关代码
tools/	                各自开发工具和文档
tutorial/	        	教程
win32.mak	        	Win32 ポート用の Makefile (Visual C++ 用) 

比较核心的代码是backend,bin,interface。backend里面包含了后端代码:

目录文件	        	  说明
Makefile				makefile
access/					各种存储访问方法(在各个子目录下)
	common(共同函数)、
	gin (Generalized Inverted Index通用逆向索引)
 	gist (Generalized  Search Tree通用索引)、
 	hash (哈希索引)、
 	heap (heap的访问方法)、
 	index (通用索引函数)、
 	nbtree (Btree函数)、
 	transam (事务处理)
bootstrap/				数据库的初始化处理(initdb的时候)
catalog/				系统表
commands/				SELECT/INSERT/UPDATE/DELETE的SQL语句处理
executor/				执行器
foreign/				FDW(Foreign Data Wrapper)处理
lib/	        		共同函数
libpq/	        		前端/后端通信处理
main/	        		postgres的主函数
nodes/	        		计划树节点相关的处理函数
optimizer/				优化器
parser/					SQL语句解析器
port/	        		平台相关的代码
postmaster/				postmaster的主函数 (常驻postgres)
replication/			streaming replication
regex/	        		正则处理
rewrite/				规则及视图相关的重写处理(解析时用到)
snowball/				全文检索相关(语干处理)
storage/				共享内存、磁盘上的存储、缓存等全部一次/二次记录管理(以下的目录)
	buffer/(缓存管理)、 
	file/(文件)、
	freespace/(Fee Space Map管理) 
	ipc/(进程间通信)、
	large_object/(大对象的访问函数)、 
	lmgr/(锁管理)、
	page/(页面访问相关函数)、
	smgr/(存储管理器)
tcop/	        		postgres (数据库引擎的进程)的主要部分
tsearch/				全文检索
utils/	        		各种模块(以下目录) 
	adt/(嵌入的数据类型)、
	cache/(缓存管理)、 
	error/(错误处理)、
	fmgr/(函数管理)、
	hash/(hash函数)、
	init/(数据库初始化、postgres的初期处理)、
    mb/(多字节文字处理)、
	misc/(其他)、
	mmgr/(内存的管理函数)、
	resowner/(查询处理中的数据(buffer pin及表锁)的管理)、
 	sort/(排序处理)、
 	time/(事务的 MVCC 管理)

bin目录下主要包含了pgsql,initdb等各种工具的代码,而interface里面则存放PostgreSQL的C语言的库libpq。

参考资料(References)

《PostgreSQL数据库内核分析》

Pgsrcstructure

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_40837929/article/details/129816766