下面以 CentOS 7 / CentOS 8 为例,介绍 从源码编译安装 PostgreSQL 的完整流程。如果你只是想用官方仓库安装,我也可以给你 yum 方式。
# CentOS 7
yum groupinstall -y "Development Tools"
yum install -y readline-devel zlib-devel bison flex \
openssl-devel libxml2-devel libxslt-devel \
systemd-devel wget
# CentOS 8
dnf groupinstall -y "Development Tools"
dnf install -y readline-devel zlib-devel bison flex \
openssl-devel libxml2-devel libxslt-devel \
systemd-devel wget
以 PostgreSQL 16 为例(可换成你需要的版本):
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-systemd \
--with-libxml \
--with-libxslt
如果只需要基础功能,可简化为:
./configure --prefix=/usr/local/pgsql
make -j$(nproc)
make install
安装完成后,PostgreSQL 会被安装到:
/usr/local/pgsql
不建议使用 root 运行 PostgreSQL:
useradd -r -m -s /bin/bash postgres
mkdir -p /usr/local/pgsql/data
chown -R postgres:postgres /usr/local/pgsql
su - postgres
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
vim /usr/local/pgsql/data/postgresql.conf
常用配置:
listen_addresses = '*'
port = 5432
vim /usr/local/pgsql/data/pg_hba.conf
示例(允许本地密码登录):
local all all md5
host all all 127.0.0.1/32 md5
su - postgres
/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l logfile start
/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data stop
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 /usr/local/pgsql/data start
ExecStop=/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data stop
ExecReload=/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data reload
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable postgresql
systemctl start postgresql
vim /etc/profile.d/pgsql.sh
export PATH=/usr/local/pgsql/bin:$PATH
使生效:
source /etc/profile
psql --version
su - postgres
psql
-devel 包dnf 替代 yumss -lntp | grep 5432
如果你愿意,我可以:
只要告诉我你的 CentOS 版本和使用场景即可。