用Eclipse追PostgreSQL源码

1、安装编译好的PostgreSQL(见Eclipse编译PostgreSQL 9.2.2)。

2、在Eclipse上打开Make Target 视图(Window->Show View->Other->Make->Make Target)。右键本工程,选择New,创建一个名字install。
这里写图片描述

3、安装:
1)双击install。
这里写图片描述
2)等待一小会儿,在控制台窗口显示PostgreSQL installation complete就安装成功了。显示如下:
这里写图片描述
3)安装的默认路径是在Eclipse编译PostgreSQL 9.5.2中配置的HOME路径,这时会发现在该目录下出现了一个project的文件夹(包含bin、include、lib、share四个文件夹),里面就是安装好的PG数据库。

4、对数据库进行初始化。
1)首先设置一下数据库将要存放的文件夹目录。
vim /etc/profile
添加如下几行:
export PATH=$HOME/project/bin:$PATH
export PGDATA=$HOME/postgresql-9.5.2/DemoDir
注意:此处的$HOME等价于/home/scidb,如果你输入“echo $HOME”出现的与你源码包存放的位置不一样的话,那麻烦你写成绝对路径,否则你会被路径搞死在这里···/(ㄒoㄒ)/~~
2)执行 source /etc/profile,然后输出 echo $PGDATA看刚才的配置是否生效,即是否能输出/home/scidb/postgresql-9.5.2/DemoDir
3)进入/home/scidb/project/bin执行initdb
这里写图片描述

5、调试PG。
1)回到Eclipse中,右键自己的pg工程,选择Run as->Run Configurations->C/C++ Application->pgsql Default,并进行如下配置:
这里写图片描述
这里写图片描述
Main-C/C++ Application:/home/scidb/postgresql-9.5.2/src/backend/postgres
Main-Project:pgsql
Arguments-Program Arguments:-D /home/scidb/postgresql-9.5.2/DemoDir
2)配置完成后点击run,在控制台中会显示如下所示:
这里写图片描述
这表明你的pg数据库已经在运行了(启动了6个postgres的进程),在监控是否有命令的输入,这是你可以从终端起pg客户端进行操作。

6、Debug PostgreSQL。
1)在Debug之前先对Debug进行配置,右键自己的pg工程,选择Debug As->C/DebugConfigurations->进行配置,配置的参数参照步骤5。
这里写图片描述
2)右键自己的pg工程,选择Debug As->C/C++ Application,选择postgres,如下图所示:
这里写图片描述
3)点击OK后工程会自动运行并跳转到main函数的入口,如下图所示,这是就可以一步一步的运行了。
这里写图片描述

7、监听客户端的进程(子进程),看其执行步骤。
1)首先打开终端,启动数据库的服务器端进程。进入安装数据库目录的bin目录下,并执行下面的代码:
./postgres -D /home/scidb/postgresql-9.5.2/DemoDir/
需要注意的是,在linux下的环境变量中不会默认有当前目录的,如果需要的话可以自行配置一下,也可利用./寻找当前目录下的可执行文件。执行完后即可启动数据库的服务器端。
这是最好记录一下启动的6个postgres的进程pid,方便后面对客户端进行监听时进程的选择。
2)另起一个终端,还是进入到安装数据库目录的bin目录下,第一次运行时默认之后系统自带的三个数据库,所以先要创建一个自己的数据库,例如我创建一个pgtest的数据库,执行命令如下所示:
./createdb DemoDB
创建好后进入到这个数据库中,执行命令:
./psql DemoDB
得到的结果如下图所示:
这里写图片描述
3)接下来回到Eclipse中,右键自己的pg工程,选择Debug As->C/DebugConfigurations->C++ Attach to Application->pgsql Default(Attach)(这个名称可以自行命名)。对其的配置同上。
点击Debug会弹出一个选择进程的窗口,查找和postgre相关的进程( ps axf | grep postgres),找到刚刚启动的客户端的那个postgres的进程,即带“ _ postgres: scidb pgtest [local] idle”字样的进程,追踪即可。

PS:
1、postgres工程中的postgres.c文件是psql命令的入口地方。
2、在客户端中执行命令:\dt,就会跳转到断点的位置,接下来就可以自行的追源码了。
3、报错:
1)FATAL: lock file “postmaster.pid” already exists
解决:千万不能删!千万不能删!!千万不能删!!!cat这个文件,第一行是一个pid号,执行”kill -9 pid号“ 就可以了
2)log: could not bind ipv4 socket:address already in use···
解决:listen_addresses 全部统一;修改一些杂七杂八的东西,比如说防火墙配置文件、selinux、pg_conf之类的,全部统一成一样的
3)unix 2 [ ACC ] STREAM LISTENING 82011 /tmp/.s.PGSQL.5432.lock
按照这个路径找到文件然后删掉···完成!

参考文献
1:http://wiki.postgresql.org/wiki/Working_with_Eclipse
2:http://blog.csdn.net/mgx289106164/article/details/51173302

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页