POSTGRESQL10.3源码安装主从搭建(完善版)内附第6点关于gprof目录无限增长问题

前言

由于ITPUB更新的新博文版面实在是让人受不了,转来CSDN写博文了,之前在ITPUB写了几篇关于PG主从搭建的,不过后来在自己又一次搭建的时候,发现会漏了一些小细节,(大部分内容会从我自己的博客那边手动搬运过来)在这里顺便补充上,重点还是在第6点的特殊问题解决,在网上找不到任何资料,是自己慢慢摸索出来的。

欢迎来我的ITPUB博客逛逛

http://blog.itpub.net/28371090/

如果CSDN能够把ITPUB的博客直接一键搬运过来就好了,哈哈哈哈~~

一、PG主从搭建

1、环境准备

REDHAT6.5+POSTGRESQL10.3

两台服务器

192.168.159.145(主)

192.168.159.146(备)

配置固定IP地址,关闭防火墙,配置YUM源

2、下载安装包

https://www.postgresql.org/ftp/source/v10.3/
postgresql-10.3.tar.gz

3、编译安装

(1)创建postgres用户
useradd -m -r -s /bin/bash -u 5432 postgres
(2)安装相关依赖包
yum install gettext gcc make perl python perl-ExtUtils-Embed   readline-devel   zlib-devel    openssl-devel   libxml2-devel  cmake  gcc-c++ libxslt-devel  openldap-devel  pam-devel  python-devel  cyrus-sasl-devel  libgcrypt-devel  libgpg-error-devel  libstdc++-devel openssl openssl-devel

(3)配置POSTGRES

下载postgresql-10.3.tar.gz到/opt/目录

cd /opt/

tar -xvf postgresql-10.3.tar.gz

cd postgresql-10.3/

./configure --prefix=/opt/postgresql-10.3 --with-segsize=8 --with-wal-segsize=64 --with-wal-blocksize=16 --with-blocksize=16 --with-perl --with-python --with-openssl --with-libxml --with-libxslt --enable-thread-safety

最后几行出现下图输出即配置正确,否则根据报错提示继续安装依赖包

(4)编译
make && make install

最后几行出现下图输出即配置正确

(5)安装
make world && make install -world

最后几行出现下图输出即配置正确


(6)创建相关目录及配置环境变量
mkdir -p /data/pgdata/serverlog
mkdir -p /data/pg/data/

chown -R postgres.postgres /data/
su - postgres
vi .bash_profile  (删除原来的所有,以下黄色部分直接复制粘贴)
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATH

# postgres
#PostgreSQL端口
PGPORT=5432

#PostgreSQL数据目录
PGDATA=/data/pg/data
export PGPORT PGDATA

#所使用的语言
export LANG=zh_CN.utf8

#PostgreSQL 安装目录
export PGHOME=/data/pg

#PostgreSQL 连接库文件
export LD_LIBRARY_PATH=$PGHOME/lib:/lib64:/usr/lib64:/usr/local/lib64:/lib:/usr/lib:/usr/local/lib:$LD_LIBRARY_PATH
export DATE=`date +"%Y%m%d%H%M"`

#将PostgreSQL的命令行添加到 PATH 环境变量
export PATH=$PGHOME/bin:$PATH

#PostgreSQL的 man 手册
export MANPATH=$PGHOME/share/man:$MANPATH

#PostgreSQL的默认用户
export PGUSER=postgres

#PostgreSQL默认主机地址
export PGHOST=127.0.0.1

#默认的数据库名
export PGDATABASE=postgres

#定义日志存放目录
PGLOG="/data/pgdata/serverlog"



source .bash_profile

(7)初始化数据库
#执行数据库初始化脚本
root用户登录
chown -R postgres.postgres /data/
su - postgres
$/opt/postgresql-10.3/bin/initdb --encoding=utf8 -D /data/pg/data


警告:为本地连接启动了 "trust" 认证.
你可以通过编辑 pg_hba.conf 更改或你下次
行 initdb 时使用 -A或者--auth-local和--auth-host选项.


Success. You can now start the database server using:


启动数据库
su - postgres
/opt/postgresql-10.3/bin/pg_ctl -D /data/pg/data -l logfile start



(8)相关命令拷贝
root用户
mkdir /data/pg/bin
cp /opt/postgresql-10.3/bin/*  /data/pg/bin

chown -R postgres.postgres /data/pg/bin

4、主库配置

(1)创建一个用户复制的用户replica
su - postgres

psql

CREATE ROLE replica login replication encrypted password 'replica';

\q

(2)修改pg_hba.conf文件,指定replica登录网络(最后一添加)

vi /data/pg/data/pg_hba.conf

host    replication    replica        192.168.159.0/24    md5
host    all        all        192.168.159.0/24    trust

 
(3)主库配置文件修改以下几项,其他不变
vi /data/pg/data/postgresql.conf
listen_addresses = '*'
wal_level = hot_standby  #热备模式
max_wal_senders= 6 #可以设置最多几个流复制链接,差不多有几个从,就设置多少
wal_keep_segments = 10240  #重要配置
wal_send_timeout = 60s
max_connections = 512 #从库的 max_connections要大于主库
archive_mode = on #允许归档
archive_command = 'cp %p /data/pg/data/archive/%f'   #根据实际情况设置

checkpoint_timeout = 30min
max_wal_size = 3GB
min_wal_size = 64MB

mkdir /data/pg/data/archive

5、从库环境

(1)把备库的数据文件夹目录清空

rm -rf  /data/pg/data/*

(2)在备库上运行

pg_basebackup -F p --progress -D /data/pg/data/ -h 192.168.159.145 -p 5432 -U replica --password

输入密码replica 

!!!注意,复制完成后,在备库一定要将数据目录下的所有文件重新授权

chown -R postgres.postgres /data/pg/data/

(3)创建recovery.conf 文件

cp /opt/postgresql-10.3/share/recovery.conf.sample /data/pg/data/recovery.conf

vi /data/pg/data/recovery.conf

standby_mode = on

primary_conninfo = 'host=192.168.159.145 port=5432 user=replica password=replica'

recovery_target_timeline = 'latest'

trigger_file = '/data/pg/data/trigger.kenyon'

(4)配置postgresql.conf文件
vi /data/pg/data/postgresql.conf
listen_addresses ='*'

wal_level = hot_standby

max_connections =1000 #一般从的最大链接要大于主的

hot_standby =on  #说明这台机器不仅仅用于数据归档,也用于查询

max_standby_streaming_delay =30s

wal_receiver_status_interval = 10s  #多久向主报告一次从的状态

hot_standby_feedback = on   #如果有错误的数据复制,是否向主进行范例



(5)启动备库

su - postgres
/opt/postgresql-10.3/bin/pg_ctl -D /data/pg/data/ -l logfile start

如果无法启动,到主库复制文件postmaster.opts到备库如下操作:

scp /data/pg/data/postmaster.opts 192.168.159.146:/data/pg/data/

chown -R postgres.postgres /data/pg/data/
cd /data/pg/

chmod 700 data/

6、特殊问题

在安装完POSTGRESQL后,数据库运行一段时间,发现/data/pg/data/目录下的 gprof目录中,有非常多的目录及文件,且占用空间越来越大,如下图:

而且这里目录中全都只有一个文件gmon.out,是二进制文件,每个文件都是2.1M大小。

甚至,这些文件在每次登陆退出数据库的时候,都会自动生成。一天能生成10几G,几天就40多G了,无法容忍,如果业务量上来,估计几分钟就把磁盘撑爆了,部署自动删除脚本也不好使。(注意哦,可以手动删除那些文件)

经查这是因为在./configure的时候,直接按照网上的大坑增加了参数--enable-profiling,简直了!!!上官网查这个参数是干嘛用的,原来这个参数是用来给PG开发人员作为性能分析的,根本不是给用户使用的。

--enable-profiling GCC編译器下,所有程序和库将被編译成可进行性能分析,后端退出时生成的 gmon.out 用于性能分析;多用于开发

找到问题所在,那么接下来就是解决问题啦,刚开始想的是重新编译安装搭建,但是是生产库,业务已经上线,不容易搞啊,就和业务沟通,在凌晨5点的时候,没有业务的时间段搞。然后就是备份打包啊,在选择安装目录的时候,重新建立一个数据目录,原来的目录被我保留了下来,然后就是编译安装,但是后来在将备份文件导入新库的时候,发现坑爹的设置了归档,而且表空间文件什么的位置都没动。所以恢复自然是失败了,这个时候只能是回退操作了,幸好之前的库没动,把新安装的数据目录干掉,重新启动原来的库,检查了一遍,发现没毛病,主从一样能用,头昏昏的,接着睡了个回笼觉,早上上班回来在测试库就发现秘密啦,哈哈哈哈,解决方法见下面的命令吧(其实就是重新编译一下,具体原理我也不清楚,反正就是解决了问题,如果有大神看到了,请多多指教哈~~!)

解决方法如下:

cd /opt/

rm -rf postgresql-10.3/

tar xvf postgresql-10.3.tar.gz

cd /opt/postgresql-10.3/

./configure --prefix=/opt/postgresql-10.3 --with-segsize=8 --with-wal-segsize=64 --with-wal-blocksize=16 --with-blocksize=16 --with-perl --with-openssl --with-libxml --with-libxslt --enable-thread-safety
make && make install

编译完成后,必须重启数据库进程

/opt/postgresql-10.3/bin/pg_ctl -D /data/pg/data/ -l logfile restart

如果条件实在不允许重启数据库的话,也可以将配置文件重新加载

systemctl daemon-reload

7、主备手动切换

(1)创建备库recovery.conf 文件( 在备库上操作192.168.159.146)

  cp $PGHOME/share/recovery.conf.sample $PGDATA/recovery.conf

  

配置以下参数  

standby_mode = 'on'  --标记PG为STANDBY SERVER

primary_conninfo = 'host=192.168.159.145 port=5432 user=replica password=replica'   --标识主库信息

trigger_file = '/data/pg/data/trigger.kenyon'     --标识触发器文件

(2) 关闭主库(在主库上操作192.168.159.145)

/opt/postgresql-10.3/bin/pg_ctl -D /data/pg/data/ -l logfile stop

(3)激活备库到主库状态 ( 在备库上操作192.168.159.146 )

   激活备库只要创建一个文件即可,根据备库 recovery.conf 配置文件的参数 trigger_file 值,

  创建这个 trigger 文件即可。 例如 "touch /data/pg/data/trigger.kenyon"

  

touch /data/pg/data/trigger.kenyon

过一会儿发现 recovery.conf 文件变成 recovery.done ,说明备库已经激活。

查看logfile日志,出现以下信息即激活
2018-06-04 21:11:01.137 PDT [12818] 日志:  已找到触发器文件:/data/pg/data/trigger.kenyon
2018-06-04 21:11:01.148 PDT [12818] 日志:  redo 在 0/C02A390 完成
2018-06-04 21:11:01.172 PDT [12818] 日志:  已选择的新时间线ID:2
2018-06-04 21:11:05.442 PDT [12818] 日志:  归档恢复完毕
2018-06-04 21:11:05.568 PDT [12817] 日志:  数据库系统准备接受连接


(4)修改原来主库的配置文件
vi /data/pg/data/postgresql.conf
max_connections = 1500 #从库值要比主库值大
 


(5)激活原来的主库,让其转变成从库  (在原来的主库上执行192.168.159.145) 

--创建 $PGDATA/recovery.conf 文件,配置以下参数
vi /data/pg/data/recovery.conf

recovery_target_timeline = 'latest'

standby_mode = 'on'  #--标记PG为STANDBY SERVER

primary_conninfo = 'host=192.168.159.146 port=5432 user=replica password=replica'   #--标识主库信息

trigger_file = '/data/pg/data/trigger.kenyon'     #--标识触发器文件
 

--修改 pg_hba.conf (现在的主库上增加192.168.159.146),添加以下配置
vi /data/pg/data/pg_hba.conf

host   replication     replica          192.168.159.145/32         md5


启动原来的主库即现在的从库(192.168.159.145)
/opt/postgresql-10.3/bin/pg_ctl -D /data/pg/data/ -l logfile start

查看现在的从库logfile日志发现报错信息
2018-06-05 00:08:00.326 PDT [9729] 详细信息:  WAL结束时,到了时间线1和地址0/C02A400.
2018-06-05 00:08:00.327 PDT [9725] 日志:  在当前恢复点0/C02A630之前, 新的时间点2脱离了当前茅的数据库系统时间点1
2018-06-05 00:08:05.322 PDT [9729] 日志:  在0/C000000处时间线1上重启WAL流操作
2018-06-05 00:08:05.327 PDT [9729] 日志:  复制由主用服务器终止
2018-06-05 00:08:05.327 PDT [9729] 详细信息:  WAL结束时,到了时间线1和地址0/C02A400.
2018-06-05 00:08:05.329 PDT [9725] 日志:  在当前恢复点0/C02A630之前, 新的时间点2脱离了当前茅的数据库系统时间点1
2018-06-05 00:08:10.328 PDT [9729] 日志:  在0/C000000处时间线1上重启WAL流操作
2018-06-05 00:08:10.332 PDT [9729] 日志:  复制由主用服务器终止
2018-06-05 00:08:10.332 PDT [9729] 详细信息:  WAL结束时,到了时间线1和地址0/C02A400.
2018-06-05 00:08:10.333 PDT [9725] 日志:  在当前恢复点0/C02A630之前, 新的时间点2脱离了当前茅的数据库系统时间点1

在现在的主库操作:
scp /data/pg/data/pg_wal/00000002.history 192.168.159.145:/data/pg/data/pg_wal/

 

(6)两个节点都操作
vi /data/pg/data/recovery.conf
restore_command = 'cp /data/pg/data/archive/%f %p'


mkdir /data/pg/data/archive
chown postgres.postgres /data/pg/data/archive

vi /data/pg/data/postgresql.conf
archive_command = 'cp %p /data/pg/data/archive/%f' 

8、报错问题处理

(1)PG无法登陆问题

报错如下:
[postgres@node1 ~]$ psql
psql: symbol lookup error: psql: undefined symbol: PQconnectdbParams

因为启动PG的时候是有执行日志的
[postgres@node1 ~]$ /opt/postgresql-10.3/bin/pg_ctl -D /data/pg/data -l logfile start
可以在postgres家目录查看logfile日志报错信息:
2018-05-31 23:00:18.703 PDT [12734] 致命错误:  无法加载库 "/opt/postgresql-10.3/lib/libpqwalreceiver.so": /opt/postgresql-10.3/lib/libpqwalreceiver.so: undefined symbol: PQescapeIdentifier
2018-05-31 23:00:23.709 PDT [12736] 致命错误:  无法加载库 "/opt/postgresql-10.3/lib/libpqwalreceiver.so": /opt/postgresql-10.3/lib/libpqwalreceiver.so: undefined symbol: PQescapeIdentifier
2018-05-31 23:00:28.715 PDT [12737] 致命错误:  无法加载库 "/opt/postgresql-10.3/lib/libpqwalreceiver.so": /opt/postgresql-10.3/lib/libpqwalreceiver.so: undefined symbol: PQescapeIdentifier
2018-05-31 23:00:33.721 PDT [12738] 致命错误:  无法加载库 "/opt/postgresql-10.3/lib/libpqwalreceiver.so": /opt/postgresql-10.3/lib/libpqwalreceiver.so: undefined symbol: PQescapeIdentifier
2018-05-31 23:00:38.730 PDT [12739] 致命错误:  无法加载库 "/opt/postgresql-10.3/lib/libpqwalreceiver.so": /opt/postgresql-10.3/lib/libpqwalreceiver.so: undefined symbol: PQescapeIdentifier


这个时候,可以临时执行
export LD_LIBRARY_PATH=/opt/postgresql-10.3/lib/libpqwalreceiver.so
加载缺失的库文件,再重新启动PG就可以登录了

想要永久的解决,如下:
vi  ~/.bash_profile
在最后一行添加
export LD_LIBRARY_PATH=/opt/postgresql-10.3/lib/libpqwalreceiver.so

 

(2)PG数据库无法启动

[postgres@node2 data]$ /opt/postgresql-10.3/bin/pg_ctl -D /data/pg/data/ -l logfile start
报错:
等待服务器进程启动 .... 已停止等待
pg_ctl: 无法启动服务器进程
检查日志输出.

按报错提示查看日志
tail logfile 
2018-05-30 22:40:05.208 PDT [16383] 日志:  在0/8000130上已到达一致性恢复状态
2018-05-30 22:40:05.208 PDT [16382] 日志:  数据库系统准备接受只读请求的连接
2018-05-30 22:40:05.242 PDT [16387] 日志:  在时间点: 0/C000000 (时间安排1)启动日志的流操作
2018-05-30 23:19:59.272 PDT [16382] 日志:  接到到智能 (smart) 停止请求
2018-05-30 23:19:59.325 PDT [16387] 致命错误:  由于管理员命令中断walreceiver进程
2018-05-30 23:19:59.332 PDT [16384] 日志:  正在关闭
2018-05-30 23:19:59.426 PDT [16382] 日志:  数据库系统已关闭
2018-06-03 23:59:31.974 PDT [15817] 致命错误:  无法写入锁文件 "postmaster.pid": 设备上没有空间
2018-06-04 00:00:32.287 PDT [15840] 致命错误:  无法写入锁文件 "postmaster.pid": 设备上没有空间
2018-06-04 00:01:54.556 PDT [15867] 致命错误:  无法写入锁文件 "postmaster.pid": 设备上没有空间


df -h查看磁盘空间,果然磁盘空间不足
[postgres@node2 data]$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2        18G   17G   18M 100% /
tmpfs           242M   72K  242M   1% /dev/shm
/dev/sda1       291M   39M  238M  14% /boot
[postgres@node2 data]$

 

(3)主从切换后,从库日志报错

主从切换后,从库logfile日志报错:
2018-07-01 21:08:41.889 PDT [2644] 日志:  listening on IPv4 address "0.0.0.0", port 5432
2018-07-01 21:08:41.889 PDT [2644] 日志:  listening on IPv6 address "::", port 5432
2018-07-01 21:08:41.893 PDT [2644] 日志:  listening on Unix socket "/tmp/.s.PGSQL.5432"
2018-07-01 21:08:41.954 PDT [2645] 日志:  数据库上次关闭时间为 2018-07-01 21:08:41 PDT
2018-07-01 21:08:42.008 PDT [2644] 日志:  数据库系统准备接受连接


从库的安装目录需增加文件recovery.conf
且需配置如下:
vi /data/pg/data/recovery.conf

recovery_target_timeline = 'latest'

standby_mode = 'on'  #--标记PG为STANDBY SERVER

primary_conninfo = 'host=192.168.159.146 port=5432 user=replica password=replica'   #--标识主库信息

trigger_file = '/data/pg/data/trigger.kenyon'     #--标识触发器文件

(4)网络登录方式报错


psql: FATAL:  no pg_hba.conf entry for host "192.168.159.128", user "dbuser", database "exampledb", SSL off

出现这个报错,就要检查pg_hba.conf文件了,
添加设置host exampledb dbuser 192.168.159.0/24        trust  重启数据库即可解决
 

(5)发现登陆postgres时出现以下问题


-bash-4.1$ 
root用户执行
cp /etc/skel/.bash* /var/lib/pgsql/
再次登陆即可变成
[postgres@node1 ~]$

9、逻辑备份及恢复

全库
pg_dumpall -h 192.168.159.145 -U postgres -p 5432 > "/backup/full_2018072505.dmp"
单库
/data/pg/bin/pg_dump -h 192.168.159.145 -U test  testdb > /backup/test.bak

恢复

psql < /backup/full_2018072505.dmp

psql < /backup/test.bak

10、生产库优化参数配置

listen_addresses = '*'        # what IP address(es) to listen on;
max_connections = 950            # (change requires restart)
tcp_keepalives_idle = 3600        # TCP_KEEPIDLE, in seconds;  远程连接超时
tcp_keepalives_interval = 10        # TCP_KEEPINTVL, in seconds; 10秒内无响应则超时
tcp_keepalives_count = 10        # TCP_KEEPCNT;发送10个数据包
shared_buffers = 4GB            # min 128kB
dynamic_shared_memory_type = posix    # the default is the first option
wal_level = hot_standby            # minimal, replica, or logical
fsync = on                # flush data to disk for crash safety
wal_buffers = 16MB            # min 32kB, -1 sets based on shared_buffers
max_wal_size = 2GB
min_wal_size = 1GB
checkpoint_completion_target = 0.7    # checkpoint target duration, 0.0 - 1.0
archive_mode = on        # enables archiving; off, on, or always
archive_command = 'cp %p /data/pg/archivedir/%f'        # command to use to archive a logfile segment
max_wal_senders = 10        # max number of walsender processes
wal_keep_segments = 10240        # in logfile segments, 16MB each; 0 disables
wal_sender_timeout = 60s    # in milliseconds; 0 disables
hot_standby = on            # "off" disallows queries during recovery
max_standby_streaming_delay = 30s    # max delay before canceling queries
wal_receiver_status_interval = 10s    # send replies at least this often
hot_standby_feedback = on         # send info from standby to prevent
effective_cache_size = 8GB
log_timezone = 'PRC'
statement_timeout = 7200000            #设置单条SQL的执行超时,防雪崩,单位毫秒ms
datestyle = 'iso, ymd'
timezone = 'PRC'                    #时区PRC=Asia/Shanghai
lc_messages = 'zh_CN.utf8'            # locale for system error message
lc_monetary = 'zh_CN.utf8'            # locale for monetary formatting
lc_numeric = 'zh_CN.utf8'            # locale for number formatting
lc_time = 'zh_CN.utf8'                # locale for time formatting
default_text_search_config = 'pg_catalog.simple'

11、基本命令

\d 数据库  —— 得到所有表的名字
\d 表名  —— 得到表结构

查看字符集
show server_encoding;

修改表结构
ALTER TABLE your_table_name alter COLUMN your_column_name type character varying(3000);

得到当前db中所有表的信息(这里pg_tables是系统视图)
select * from pg_tables

查用户拥有的权限
select * from information_schema.table_privileges

select tablename from pg_tables where schemaname='public'
得到所有用户自定义表的名字(这里"tablename"字段是表的名字,"schemaname"是schema的名字。用户自定义的表,如果未经特殊处理,默认都是放在名为public的schema下)

select pg_size_pretty(pg_relation_size('t_inventory_product')); // 查看空间大小  
 
select A.relname,B.reltuples  from pg_stat_user_tables A,pg_class B where A.relname=B.relname order by B.reltuples  DESC-- 查询用户所建的表及其表中记录数(非精确值,取决于vacuum的频率,但用于分析足够精度了)


SQL方式查看表结构
SELECT a.attnum,
a.attname AS field,
t.typname AS type,
a.attlen AS length,
a.atttypmod AS lengthvar,
a.attnotnull AS notnull,
b.description AS comment
FROM pg_class c,
pg_attribute a
LEFT OUTER JOIN pg_description b ON a.attrelid=b.objoid AND a.attnum = b.objsubid,
pg_type t
WHERE c.relname = 'udoc_saldiscount'
and a.attnum > 0
and a.attrelid = c.oid
and a.atttypid = t.oid
ORDER BY a.attnum;


网络登陆方式:
psql -h 192.168.159.128 -U dbuser -p password -d exampledb -p 5432
本地登陆
 psql -d exampledb

创建数据库用户:
CREATE USER dbuser WITH PASSWORD 'password';

创建数据库
CREATE DATABASE exampledb OWNER dbuser;

赋予权限
GRANT ALL PRIVILEGES ON DATABASE exampledb TO dbuser;

建库参考:

mkdir /data/pg/mmmm_tbs/
CREATE ROLE mmmm LOGIN PASSWORD '123456';
create tablespace data_mmmmowner mmmm location '/data/pg/mmmm_tbs/';
create database mmmmdb with owner=mmmm template=template0 encoding='UTF8' lc_collate='zh_CN.UTF8' lc_ctype='zh_CN.UTF8' tablespace=data_mmmm;

12、编译相关参数参考

configure 編译选项:
--prefix=PREFIX 指定安装目录,默认为 /usr/local/pgsql
--bindir= 可执行文件目录,默认 /PREFIX/bin
--sysconfdir= 配置文件目录,默认 /PREFIX/etc
--libdir= 库文件目录,默认 /PREFIX/lib
--includedir= 头文件目录,默认 /PREFIX/include
--datarootdir=DATAROOTDIR 设置只读共享文件目录,默认为 /PREFIX/share
--mandir= man手册目录,默认 /DATAROOTDIR/man
--with-extra-version=STRING 在版本号后面追加 STRING 字符串,用作自定义版本标识
--with-pgport=NUMBER 指定服务器端与客户端的默认端口号,缺省为 5432
--with-openssl 編译 ssl 支持,需要事先安装 OpenSSL 包
--with-pam 編译 PAM 支持
--with-ldap 編译 LDAP 支持,需要事先安装 OpenLDAP 包
--with-segsize= 设定 segment size ,以 gigabytes(GB) 为单位,默认为 1GB ,大型的表会按 segsize 被分割成多个文件
--with-blocksize= 指定块大小,是表内存储和 I/O 的基本单位,默认 8Kbytes ,通常无需变更,取值范围 1-32KB
--with-wal-segsize= 设置 WAL(Write-Ahead Logging) 的 segment size ,以 megabytes(MB) 为单位,默认 16MB ,取值范围 1-64MB
--with-wal-blocksize= 指定 WAL 的块大小,这是 WAL 預写式日志存储和 I/O 的基本单位,以 Kbytes 为单位,默认 8KB ,取值范围 1-64KB
--enable-debug (Compiles all programs and libraries with debugging symbols. This means that you can run the programs in a debugger to analyze problems),使用 GCC 編译器时可用于生产环境,其它編译器会影响性能;多用于开发
--enable-profiling GCC編译器下,所有程序和库将被編译成可进行性能分析,后端退出时生成的 gmon.out 用于性能分析;多用于开发
--enable-coverage 代码覆盖率测试,仅用于开发
--enable-cassert 开启服务器的 assertion(断言) 检查,仅用于开发
--enable-depend (Enables automatic dependency tracking. With this option, the makefiles are set up so that all affected object files will be rebuilt when any header file is changed),仅用于开发
--enable-dtrace 編译动态追踪工具 Dtrace 支持,当前尚不能用于 Linux 平台,可用于 FreeBSD、Solaris
--with-systemd 开启 systemd 支持,需9.6及以上版本

猜你喜欢

转载自blog.csdn.net/germany15914326114/article/details/81196778