下面以 CentOS 7 / 8 为例,说明如何从源码编译安装 PostgreSQL(以 PostgreSQL 15 为例,其他版本类似)。
# CentOS 7
yum groupinstall "Development Tools" -y
yum install -y readline-devel zlib-devel libxml2-devel libxslt-devel \
openssl-devel pam-devel bison flex wget
# CentOS 8
dnf groupinstall "Development Tools" -y
dnf install -y readline-devel zlib-devel libxml2-devel libxslt-devel \
openssl-devel pam-devel bison flex wget
cd /usr/local/src
wget https://ftp.postgresql.org/pub/source/v15.5/postgresql-15.5.tar.gz
tar zxvf postgresql-15.5.tar.gz
cd postgresql-15.5
./configure \
--prefix=/usr/local/pgsql \
--with-openssl \
--with-zlib \
--with-libxml \
--with-libxslt \
--with-pam
查看配置是否成功:
echo $?
make -j$(nproc)
make install
安装完成后:
ls /usr/local/pgsql
useradd -m postgres
passwd postgres
mkdir -p /data/pgdata
chown -R postgres:postgres /data/pgdata
su - postgres
/usr/local/pgsql/bin/initdb -D /data/pgdata
/usr/local/pgsql/bin/pg_ctl -D /data/pgdata -l logfile start
登录测试:
/usr/local/pgsql/bin/psql
vi /etc/profile.d/pgsql.sh
内容:
export PATH=/usr/local/pgsql/bin:$PATH
export PGDATA=/data/pgdata
使生效:
source /etc/profile.d/pgsql.sh
创建服务文件:
vi /usr/lib/systemd/system/postgresql.service
示例:
[Unit]
Description=PostgreSQL database server
After=network.target
[Service]
Type=forking
User=postgres
Group=postgres
ExecStart=/usr/local/pgsql/bin/pg_ctl -D /data/pgdata start
ExecStop=/usr/local/pgsql/bin/pg_ctl -D /data/pgdata stop
Restart=on-failure
[Install]
WantedBy=multi-user.target
启用:
systemctl daemon-reload
systemctl enable postgresql
systemctl start postgresql
readline-develzlib-devel修改:
vi /data/pgdata/postgresql.conf
listen_addresses = '*'
vi /data/pgdata/pg_hba.conf
host all all 0.0.0.0/0 md5
重启:
pg_ctl -D /data/pgdata restart
如果你需要 指定版本、编译插件(如 pg_stat_statements) 或 CentOS Stream / Rocky / Alma 版本,我也可以补充。