下面以 CentOS 7 / 8 为例,说明如何从源码编译安装 PostgreSQL。
# CentOS 7
yum groupinstall "Development Tools" -y
yum install -y readline-devel zlib-devel libxml2-devel libxslt-devel \
openssl-devel pam-devel systemd-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 systemd-devel bison flex wget
示例版本(可替换):
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
./configure \
--prefix=/usr/local/pgsql \
--with-openssl \
--with-zlib \
--with-libxml \
--with-libxslt \
--with-systemd
查看所有参数:
./configure --help
make -j$(nproc)
make install
useradd 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
启动:
/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l logfile start
cat >> /etc/profile <<EOF
export PATH=/usr/local/pgsql/bin:\$PATH
EOF
source /etc/profile
创建服务文件:
vi /usr/lib/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
Restart=on-failure
[Install]
WantedBy=multi-user.target
启用:
systemctl daemon-reload
systemctl enable postgresql
systemctl start postgresql
psql -V
psql -U postgres
如果你需要:
可以直接告诉我你的 CentOS 版本和需求。