PostgreSQL源码目录结构及其相关模块功能分析
来源:互联网 发布:阿里云可以干嘛 编辑:程序博客网 时间:2024/06/16 17:51
PostgreSQL源码目录结构及其相关模块功能分析
- PostgreSQL源码目录结构及其相关模块功能分析
- 概述
- 源码目录结构
- 源码中的核心目录文件
- backend目录分析
- bin目录分析
- interfaces目录分析
- 源码阅读方法
- GDB调试代码
- PostgreSQL源码目录结构及其相关模块功能分析
概述
本文开始之后的文章,将对PostgreSQL 9.5.3源代码进行分析,其源代码下载地址: https://www.postgresql.org/ftp/source/v9.5.3/ , 下载之后解压,在其子目录中有一个src的文件夹,在该文件夹中存放的就是PostgreSQL的源代码。PostgreSQL源代码结构清晰,源码中每一个子目录都对应一个模块,下面将从不同的角度分析PostgreSQL源代码的目录结构。
源码目录结构
在\src\目录下存在下面的文件,根据使用情况对目录功能进行了分析,其中有一些还不知道功能。
源码中的核心目录文件
在源码中有三个核心目录文件,分别是backend、bin、interfaces,下面将主要介绍中的三个文件中的内容。
backend目录分析
backend代码的头文件包含在include目录中,其组织虽然与beckend的目录结构类似,但是并非完全相同。
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 #仅仅在飞生产环境下才能这么做,否则会导致性能的降低
- 在\src\Makefile.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
- PostgreSQL源码目录结构及其相关模块功能分析
- NS3目录结构和相关模块
- NS3目录结构和相关模块
- [PostgreSQL] pg源码src/backend/目录下的结构
- PostgreSQL源码结构
- PostgreSQL源码结构
- PostgreSQL源码结构
- PostgreSQL源码结构
- 1.2 Android 5.1 源码目录结构与源码阅读相关
- 《易道客》源码剖析之一:模块的目录结构分析
- webrtc 源码目录结构分析及各模块介绍
- 智能客户端相关Application Block结构功能分析(一)
- 智能客户端相关Application Block结构功能分析(二)
- 目录结构及其概述
- Odoo模块目录结构
- contacts模块功能分析
- 基础档案 模块功能分析
- MMS 源码目录结构
- QT5的软键盘输入法
- 复合组件(EditText输入内容,显示图片,点击图片删除输入内容,点击button弹出输入的内容)
- SVN的安装和基本用法
- Devexpress 自定义DisplayFormat
- fresco源码分析-软引用的黑科技
- PostgreSQL源码目录结构及其相关模块功能分析
- call() apply() 定义一些函数,用于传递和调用
- 在Eclipse中查看JDK类库的源代码
- Ajax学习
- leetCode_Trapping Rain Water
- JS、Jquery选择器总结
- unity android SDK 的安装
- C++随机整数
- APP架构设计