1.整体内容介绍
PG技术系列记录从PG下载编译,使用到PG各组件使用原理+源码分析,采用自底向上,从整体到局部的方式来进行详细分析(从PG系统概述到存储管理,再到索引,查询编译,事务,并发,安全,复制和分布式相关内容),中间也会穿插GP(Greenplum)部分原理的介绍。本篇为第一篇,也就是环境准备篇,以此环境为基础来进行后续的介绍。
2.下载编译流程
2.1 git 拉取并切换到稳定分支
git clone https://github.com/postgres/postgres.git
git checkout REL_11_STABLE
//或者拉取和切换分支一起执行
git clone -b REL_11_STABLE https://github.com/postgres/postgres.git
2.2 编译执行
到PG的目录下执行如下指令
//说明:--prefix指定安装目录;--enable-debug debug;--enable-cassert打开debug检查;CFLAGS一些编译选项
./configure --prefix=/home/pghome --enable-debug --enable-cassert CFLAGS="-ggdb -O0 -g3 -Wall -fno-omit-frame-pointer -fstack-protector-strong"
//编译安装
make -sj && make install
2.3 环境变量配置
环境变量 ~/.bashrc 可以先备份一个防止错误
export PATH="/home/pghome/bin:$PATH" #可执行文件查找路径
export LD_LIBRARY_PATH="/home/pghome/lib:$LD_LIBRARY_PATH" #动态库查找路径
export PGHOME="/home/pghome"
export PGDATA="/home/pgdata"
//立即生效
source ~/.bashrc
2.4 初始化数据库
initdb -D /home/pgdata
2.5 如果有需要可以编译PG扩展内容
cd contrib/pg_stat_statements
make -sj && make install
2.6 按照需要修改参数
vim /home/pgdata/postgresql.conf
//下面是常用参数,含义比较好理解
max_connections = 100
max_wal_senders = 10
max_replication_slots = 10
max_worker_processes = 10
shared_preload_libraries = 'pg_stat_statements'
listen_addresses = '*'
port = 6688
logging_collector = on
log_directory = 'log'
log_filename = 'postgresql-%a.log'
log_truncate_on_rotation = on
log_rotation_age = 1d
log_rotation_size = 0
log_checkpoints = on
log_connections = on
log_disconnections = on
log_error_verbosity = verbose
log_line_prefix = '%m [%p]'
log_timezone = 'PRC'
log_autovacuum_min_duration = 0
2.6 启动停止,连接测试
//启动、停止
pg_ctl -D /home/pgdata -l /home/pgdata/logfile1 start
pg_ctl -D /home/pgdata -l /home/pgdata/logfile1 stop
//连接测试
psql -p 6688 -d postgres
create table t1(a int,b text);
insert into t1 values(1,'aa');
select * from t1;
3. 总结
以上编译安装PG完成,常用命令可在安装目录的bin下查看,下附简单的多进程调试方式。
1.使用ps -ef 查看进程,其中带backend的是子进程
调试:
pstack 进程号 //可以查看堆栈
gdb -args pg_ctl -D /home/pgdata -l /home/pgdata/logfile1 start 帶參數
set follow-fork-mode child //调试子進程
设置调试模式:set detach-on-fork [on | off] off表示调试当前进程时另外进程阻塞
查看调试的进程 info inferiors
切换当前调试的进程 inferior id
使进程脱离GDB调试 detach inferiors id
查看线程信息:info threads reverse-next 回退
更多详细内容可见微信公众号:程序员学习随笔