如何用调试器动态跟踪PostgreSQL?
一.PostgreSQL版本及相关工具的选择
1.调试器选择cgdb
关于cgdb的介绍请参考下面链接:
http://cgdb.github.io/
2.操作系统选择
ubuntu 13.04
3.PostgreSQL选把最新的稳定版9.2.4
二.编译及调试环境搭建
1.安装编译及调试时所依赖的工具和库
pg@zfs:~$ sudo apt-get install gcc gdb cgdb make flex bison libreadline6-dev zlib1g-dev
2.下载PostgreSQL 9.2.4版本的源码
pg@zfs:~$ wget http://ftp.postgresql.org/pub/source/v9.2.4/postgresql-9.2.4.tar.bz2
3.解压源码包
pg@zfs:~$ tar xvf postgresql-9.2.4.tar.bz2
4.配置编译选项
pg@zfs:~/postgresql-9.2.4$ ./configure --prefix=/home/pg/db --enable-debug CFLAGS=-g
5.编译并安装PostgreSQL
pg@zfs:~/postgresql-9.2.4$ make && make install
6.创建并初始化数据库
pg@zfs:~/db$ mkdir data
pg@zfs:~/db$ bin/initdb -D /home/pg/db/data -U postgres -W
注意:上条命令在执行过程中会提示设置superuser的密码
7.启动PostgreSQL

图1
由上图1可见,数据已经安装成功。
到目前为止,所有的前期准备工作结束了,下面开始演示如何用cgdb跟踪PostgreSQL。
三.配置PostgreSQL
1.启用SysLogger功能
在postgresql.conf中,
将logging_collector的值由off改为on
将log_destination = 'stderr'前的注释符'#'去掉
2. 能够接受其他机器来的连接
在postgresql.conf中,
将listen_addresses值由"localhost"改为"*"。
3.启用client连接的验证
在pg_hba.conf中,
更改前:
# IPv4 local connections:
host all all 127.0.0.1/32 trust
更改后:
# IPv4 local connections:
host all all 0.0.0.0/0 md5
四.跟踪PostgreSQL
1.执行pg@zfs:~/db$ cgdb bin/postgres 后,会出现图2的画面

图2
2.在Postmaster入口处设置断点并运行,如下图图3

图3
由图4可见,当前程序运行到了之前设置的断点处,接下来,就可以根据你的需求动态剖析PostgreSQL的代码了
图4

浙公网安备 33010602011771号