说明

编译前系统要求

  • gmake 或 make 3.80 及以上版本
  • c 编译器
  • 安装 GNU readline library
  • 安装 zlib compression library

Ubuntu

  • 创建用户,安装目录
1
2
3
sudo adduser postgres
mkdir -p /data/postgres/pg14/14.8/
chown postgres.postgres -R /data/postgres/pg14
  • 安装依赖
1
sudo apt -y install gcc make libreadline-dev zlib1g-dev libperl-dev python-dev wget
1
2
3
su - postgres
wget https://ftp.postgresql.org/pub/source/v14.8/postgresql-14.8.tar.gz
tar -zxvf postgresql-14.8.tar.gz
  • 编译安装
1
2
3
4
5
cd postgresql-14.8
# 如果 configure 或 make 过程中出现报错,可通过 make distclean 命令清空编译中生成的文件
./configure   --prefix=/data/postgres/pg14/14.8/
make
make install
  • 初始化数据库
1
/data/postgres/pg14/14.8/bin/initdb -D /data/postgres/pg14/data
  • 配置环境变量
1
2
3
4
5
6
cat >>/home/postgres/.bashrc<<EOF
export PGHOME=/data/postgres/pg14/14.8
export PATH=\$PATH:\$PGHOME/bin
export PGDATA=\$PGHOME/../data
export LD_LIBRARY_PATH=\$PGHOME/lib
EOF
  • 安装 contrib 下工具
1
2
cd /postgresql-14.8/contrib
make && make install
  • 修改 pg_hba.conf
1
2
# $PGDATA/pg_hba.conf
host    all             all             0.0.0.0/0               md5
  • 修改 postgresql.conf
1
2
# $PGDATA/postgresql.conf
listen_addresses = '*'
  • 开启数据库
1
/data/pg/pg14/14.8/bin/pg_ctl -D /data/pg/pg14/data -l logfile start
  • 关闭
    • 关闭方式说明
      • smart:等所有连接中止后关闭数据库。如果客户端连接不终止,则无法关闭数据库。
      • fast(默认/常用):快速关闭数据库,断开客户端的连接,让已有的事务回滚,然后正常关闭数据库。相当于 Oracle 的 immediate 模式
      • immediate:立即关闭数据库,相当于数据库进程立即停止,直接退出,下次启动数据库需要进行恢复(instance recover)。相当于 Oracle 数据库关闭时的 abort 模式。
    • 常用关闭方式是 fast,如果采用 smart 模式,有用户连接到数据库时,系统会一直等待,而无法关闭数据库
      • 9.5 之前版本默认是 smart 模式,需显示 -m fast 来关闭数据库
      • 9.5 以上版本可直接用 stop 命令来关闭数据。
1
/data/pg/pg14/14.8/bin/pg_ctl -D /data/pg/pg14/data stop -m mart/fast/immediate

Centos

  • 创建用户及目录
1
2
3
useradd -r -m postgres
mkdir -p /data/postgres/pg14/14.8/
chown postgres.postgres -R /data/postgres/pg14
  • 安装依赖包
1
yum -y install zlib-devel readline-devel gcc make perl perl-devel perl-ExtUtils* perl-Text-CSV* python3 python3-libs python3-devel python3-pip python3-setuptools python-devel wget
1
2
3
su - postgres
wget https://ftp.postgresql.org/pub/source/v14.8/postgresql-14.8.tar.gz
tar -zxvf postgresql-14.8.tar.gz
  • 编译安装
1
2
3
4
5
cd postgresql-14.8
# 如果 configure 或 make 过程中出现报错,可通过 make distclean 命令清空编译中生成的文件
./configure   --prefix=/data/postgres/pg14/14.8/
make world
make install
  • 初始化数据库
1
/data/postgres/pg14/14.8/bin/initdb -D /data/postgres/pg14/data
  • 配置环境变量
1
2
3
4
5
6
cat >>/home/postgres/.bashrc<<EOF
export PGHOME=/data/postgres/pg14/14.8
export PATH=\$PATH:\$PGHOME/bin
export PGDATA=\$PGHOME/../data
export LD_LIBRARY_PATH=\$PGHOME/lib
EOF
1
2
3
4
# 过时
#export PATH=$PATH:/data/postgres/13.7/bin
#export PGDATA=/data/postgres/13.7/data
#export LD_LIBRARY_PATH=/data/postgres/13.7/lib
  • 修改 pg_hba.conf
1
2
$ vi $PGDATA/pg_hba.conf
host    all             all             0.0.0.0/0               md5
  • 修改 postgresql.conf
1
2
$ vi $PGDATA/postgresql.conf
listen_addresses = '*'
  • 启动
1
2
3
pg_ctl -D /data/pg/pg14/data start
# logpath 需手动指定,存储启动日志
# pg_ctl -D /data/postgres/13.7/data -l $logpath start
  • 关闭
    • 关闭方式说明
      • smart:等所有连接中止后关闭数据库。如果客户端连接不终止,则无法关闭数据库。
      • fast(默认/常用):快速关闭数据库,断开客户端的连接,让已有的事务回滚,然后正常关闭数据库。相当于 Oracle 的 immediate 模式
      • immediate:立即关闭数据库,相当于数据库进程立即停止,直接退出,下次启动数据库需要进行恢复(instance recover)。相当于 Oracle 数据库关闭时的 abort 模式。
    • 常用关闭方式是 fast,如果采用 smart 模式,有用户连接到数据库时,系统会一直等待,而无法关闭数据库
      • 9.5 之前版本默认是 smart 模式,需显示 -m fast 来关闭数据库
      • 9.5 以上版本可直接用 stop 命令来关闭数据库
1
pg_ctl -D /data/pg/pg14/data stop -m smart/fast/immediate

配置

  • 部署后,需要调整的配置

pg_hba.conf

  • 默认创建的数据库无法接受远程连接,需配置远程使用密码连接
1
2
$ vi /data/postgres/13.7/data/pg_hba.conf
host    all             all             0.0.0.0/0               md5

postgresql.conf

连接相关

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
$ vi /data/postgres/13.7/data/postgresql.conf
# 立案庭相关
listen_addresses = '*'
port = 5432

# 连接数相关
max_connections = 2000

# keepalive 相关
tcp_keepalives_idle = 180 
tcp_keepalives_interval = 10 
## windows及其他不支持 TCP_KEEPCNT 操作系统下,此值需为 0
tcp_keepalives_count = 3

数据库日志相关

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
$ vi $PGDATA/postgresql.conf
# 系统日志
logging_collector = on
## directory 可采用默认配置,放在 log 目录下
## 该路径可以是相对路径(相对于 $PGDATA)也可以是绝对路径
log_directory = 'pg_log'
## 设置日志级别
log_destination = 'syslog'

# 慢 sql 日志
## 记录的 sql 的类型(none, ddl, mod, all),类似于 MySQL 的 general log
##log_statement = 'all'
## 记录慢 sql 的阈值(ms)
log_min_duration_statement = 500

内存

1
2
3
4
5
$ vi $PGDATA/postgresql.conf
## 共享内存大小,主要用于共享数据块,推荐设置为操作系统内存的 1/4,默认为 32M
shared_buffers=
## 执行单个 sql、排序、Hash Join 时使用的内存,SQL 运行完毕后,内存就回释放
work_mem=

高级配置

使用较大数据库提高 I/O 性能

  • 在数仓使用 PostgreSQL 时,如果希望使用较大的数据库以提高 I/O 性能时,可以在执行 ./configure 命令时指定使用较大的数据
  • 一般也指定较大的 WAL 日志文件大小
  • 如指定 32K 数据库、32K WAL 日志块、64M WAL 日志文件
1
./configure ... --with-blocksize=32 --with-wal-blocksize=32 --with-wal-segsize=64

开启数据库 checksum 功能

  • 针对一些数据可靠性较高的场景,建议打开数据库 checksum 校验功能,pg 12 版本之前,需要在 initdb 命令创建数据库时就要使用 -k 就把这个功能加上
1
initdb -k
  • pg 12 版本之后提供了工具 pg_checksums,可以把一个没有 checksum 功能的数据库转为具有该功能的数据库
    • 运行这个工具前需先将数据库停掉
    • 如果数据库较大,转换时间会比较长,需要考虑数据库停机时间
1
2
3
4
# 检查当前数据库是否开启 checksum 功能
pg_checksums -c
# -e 开启 -P 显示进度
pg_checksums -e -P