在 CentOS 上编译 PostgreSQL,一般会从 源码编译,这也是官方推荐、灵活性最高的方式。下面按 主流 CentOS 7 / 8 / Rocky / Alma 给你一套常用流程(以 PostgreSQL 16 为例)。
yum install -y gcc gcc-c++ make readline-devel zlib-devel \
openssl-devel pam-devel libxml2-devel libxslt-devel \
systemd-devel
dnf install -y gcc gcc-c++ make readline-devel zlib-devel \
openssl-devel pam-devel libxml2-devel libxslt-devel \
systemd-devel
如果你是最小化安装,建议再补上:
yum install -y wget bzip2
去官网或镜像下载:
cd /usr/local/src
wget https://ftp.postgresql.org/pub/source/v16.2/postgresql-16.2.tar.gz
tar -zxvf postgresql-16.2.tar.gz
cd postgresql-16.2
./configure \
--prefix=/usr/local/pgsql \
--with-openssl \
--with-pam \
--with-libxml \
--with-libxslt \
--with-systemd
| 参数 | 说明 |
|---|---|
--prefix |
安装目录 |
--with-openssl |
启用 SSL |
--with-pam |
PAM 认证 |
--with-libxml |
XML 支持 |
--with-libxslt |
XSLT 支持 |
--with-systemd |
systemd 集成 |
make -j$(nproc)
make install
安装完成后:
ls /usr/local/pgsql
目录结构会包含:
bin/
lib/
share/
include/
useradd -m -s /bin/bash postgres
echo 'export PATH=/usr/local/pgsql/bin:$PATH' >> /etc/profile
source /etc/profile
mkdir -p /data/pgsql
chown postgres:postgres /data/pgsql
su - postgres
/usr/local/pgsql/bin/initdb -D /data/pgsql
/usr/local/pgsql/bin/pg_ctl -D /data/pgsql -l logfile start
检查状态:
ps -ef | grep postgres
vim /etc/systemd/system/postgresql.service
内容示例:
[Unit]
Description=PostgreSQL database server
After=network.target
[Service]
Type=forking
User=postgres
ExecStart=/usr/local/pgsql/bin/pg_ctl -D /data/pgsql start
ExecStop=/usr/local/pgsql/bin/pg_ctl -D /data/pgsql stop
ExecReload=/usr/local/pgsql/bin/pg_ctl -D /data/pgsql reload
TimeoutSec=30
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable postgresql
systemctl start postgresql
readline library not found
✅ 解决:
yum install -y readline-devel
✅ 检查:
gcc --version
make --version
依赖 → 下载源码 → configure → make → make install → initdb → 启动
如果你愿意,我可以帮你:
直接告诉我你用的 CentOS 版本 + PG 版本 即可。