加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

PostgreSQL源码目录结构及其相关模块功能分析

发布时间:2020-12-13 17:03:52 所属栏目:百科 来源:网络整理
导读:PostgreSQL源码目录结构及其相关模块功能分析 PostgreSQL源码目录结构及其相关模块功能分析 概述 源码目录结构 源码中的核心目录文件 backend目录分析 bin目录分析 interfaces目录分析 源码阅读方法 GDB调试代码 概述 本文开始之后的文章,将对PostgreSQL 9.

PostgreSQL源码目录结构及其相关模块功能分析


      • PostgreSQL源码目录结构及其相关模块功能分析
        • 概述
        • 源码目录结构
          • 源码中的核心目录文件
          • backend目录分析
          • bin目录分析
          • interfaces目录分析
        • 源码阅读方法
          • GDB调试代码

概述


本文开始之后的文章,将对PostgreSQL 9.5.3源代码进行分析,其源代码下载地址: https://www.postgresql.org/ftp/source/v9.5.3/ , 下载之后解压,在其子目录中有一个src的文件夹,在该文件夹中存放的就是PostgreSQL的源代码。PostgreSQL源代码结构清晰,源码中每一个子目录都对应一个模块,下面将从不同的角度分析PostgreSQL源代码的目录结构。

源码目录结构


在src目录下存在下面的文件,根据使用情况对目录功能进行了分析,其中有一些还不知道功能。

目录 功能
backend 服务器端程序源码.c文件,对应于后台
bin 可执行文件,如initdb命令、pg_ctl命令,对应于前台
common
include 服务器端程序(backend)源码中的.h文件
interfaces libpq,PostgreSQL的C语言接口,对应于前台
makefiles 源代码编译文件makefile
pl 提供除C语言之外的支持,其中包括plpgsql、plpythoon、plperl
port 平台移植的相关代码
template 平台相关的设置值
test 测试用例,当我们队源代码进行修改之后,需要用该文件夹中的测试用例进行测试,其中包含各种测试脚本
timezone 时区信息相关代码
tools 工具包,包括可以使用vim连接psql
tutorial 编译该文件夹中的Makefile文件,将生成.sql文件,该文件用于练习简单的使用PostgreSQL数据库,简单的说就是教程,其中的脚本帮助你学习PostgreSQL
源码中的核心目录文件

在源码中有三个核心目录文件,分别是backend、bin、interfaces,下面将主要介绍中的三个文件中的内容。

backend目录分析

backend代码的头文件包含在include目录中,其组织虽然与beckend的目录结构类似,但是并非完全相同。

目录 功能
access 提供各种存取方法,所有的索引文件都在其中,包括gist、gin、hash、btree等,支持数据存取的需求
bootstrap 用来支持bootstrap运行模式,该模式主要用来创建初始的模板数据库
catalog 系统表操作,包含用于操作系统表的专用函数,也就是说该目录包含系统表以及操作系统表的函数
commands 执行非计划查询的SQL命令,如创建表命令等
executor 查询执行器
foreign FDW(foreign data wrapper)处理
lib 共同函数
libpq C/S交互的库文件
main postgresql的主函数
nodes 定义系统内部所用到的节点、链表等结构,以及处理这些机构的函数
optimizer 优化器
parser 查询解析器
po 暂时不知道其作用
port 平台兼容性处理相关函数
postmaster postmaster的主函数
regex 正则表达式库及其相关函数,用于支持正则表达式处理
replication 流复制
rewrite 查询重写,根据规则系统对查询进行重写
snowball 全文检索相关(语干处理)
storage 管理各种类型的存储系统(如磁盘、闪存等),存储相关,包括缓冲管理、文件管理、空闲空间管理、page管理、大对象管理等
tcop postgres(数据库引擎的进程)主要部分,它调用parser、optimizer、executor、commands中的函数
tsearch 全文检索
utils 各种支持函数,如排序、错误处理等函数
bin目录分析

bin目录中包含了client端常用的命令,例如:pg_ctl、pg_dump等函数的源文件,还包括psql、pgbench等工具,总之这是一个PostgreSQL工具的集合。

interfaces目录分析

该目录下含有libpq,该工具是用于高级编程语言和服务器端程序交互的接口,例如使用C语言和PostgreSQL数据库进行交互,就用到了libpq工具。

源码阅读方法


PostgreSQL是一个代码超过100万行的大型复杂系统,用眼睛来跟踪代码并不容易,因此推荐使用GDB这样的实际调试器来追踪代码的执行流程。可能有些人畏惧调试器,但是如果只是简单的追踪代码的执行流程的话还是很简单的。但是多少还是要做一些准备工作,下面介绍GDB调试时的过程。

GDB调试代码

对于大型复杂的系统,采用GDB调试追踪及其的重要,下面将介绍GDB调试的过程。

  • 首先在编译安装PostgreSQL时,在执行configure时要加上–enable-debug选项
./configure --enable-debug    #仅仅在飞生产环境下才能这么做,否则会导致性能的降低
  • 在srcMakefile.global文件中做修改
CFLAGS = -O2 -Wall -Wmissing-prototypes -Wpointer-arith 
-Wdeclaration-after-statement -Wendif-labels -Wformat-security 
-fno-strict-aliasing -fwrapv

将上述部分’-02’选项删除,然后加上’-g’参数,-02是编译器的优化选项,如果打开了,代码的执行顺序会改变,追踪起来比较困难,所以要修改。当然这样的话,编译后的可执行文件会比较大,而且会比较慢,生产环境不太适合。将-02改为-g,如下:

CFLAGS = -g -Wall -Wmissing-prototypes -Wpointer-arith 
-Wdeclaration-after-statement -Wendif-labels -Wformat-security 
-fno-strict-aliasing -fwrapv

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读