下述步骤除1使用root用户操作外,其余均使用postgres用户:
1. 编译安装环境准备
docker centos7.5
添加postgres用户:adduser postgres
给postgres用户设置密码:passwd postgres
给postgres用户赋予权限:
运行visudo命令,找到root ALL=(ALL) ALL,在下面添加一行 postgres ALL=(ALL) ALL,保存
2. 编译前准备好一些必备工具,gcc,gdb,make,zlib-devel,readline-devel等等,之后去编译,config过程中缺什么工具再sudo yum install安装即可。
3. 获取源代码,取自己需要的版本,我拿的是11.2,源码地址https://www.postgresql.org/ftp/source/
4. 解压源码,编译
4.1 将/opt目录权限赋予postgres用户,因为postgres会安装到该目录
chown -R postgres:postgres /opt
4.2 解压源码编译
tar zxvf postgresql-11.2.tar.gz,cd postgresql-11.2.tar.gz
./configure --prefix=/opt/psql --enable-cassert --enable-debug CFLAGS="-ggdb -Og -Wall -fno-strict-aliasing"
(该步骤可以增加你需要的插件功能,具体可以configure --help查看),config完成后如下图:
make,make完成后如下图:
make install,完成后如下图:
5. 上面步骤完成后,/opt/psql下面会安装好pg
6. 配置环境变量
在当前用户的.bashrc中添加
export PGHOME=/opt/psql (pg安装目录)
export PGDATA=~/pgdata (数据存放的目录,可以根据自己需求修改)
export PATH=PATH:HOME/bin:PGHOME/bin (PATH,HOME,PGHOME前面均加上$,此处由于加上后网页显示有问题,所以去掉了)
source .bashrc
7. 使用数据库
7.1 初始化,initdb,(该命令可以加参数,具体可通过initdb --help查看文档)
7.2 启动, 首先touch pglog创建一个log文件,pg_ctl -D /home/postgres/pgdata -l pglog start(logfile为log文件,可修改)
7.3 停止,pg_ctl -D /home/postgres/pgdata -l pglog stop
8. 查看启动情况
ps -ef | grep postgres 可以看到postgres实例
psql -d postgres连接到服务端,之后会fork出一个新的[local] idle的postgres实例,这个是我们需要的,也可以使用select pg_backend_pid(); 来获取进程号。
9. gdb调试
sudo gdb -p 12410,根据自己需要在相应的代码出下断点,之后psql执行sql,就会断住debug调试了。
10. 如果使用docker环境可能会有一些gdb的坑,比如docker run镜像的时候必须加选项docker run --cap-add=SYS_PTRACE -d -i -t 89f8a97db0b5 /bin/bash,使用gdb的时候加sudo选项等等。
如有错误,请指正,谢谢
欢迎关注公众号Magicio