PostgreSQL源码安装步骤

下面是一份在 PostgreSQL 18 版本中,从源码在 Rocky Linux Project 9 上编译安装的“阶段‑分步”指南(含环境准备、编译、安装、初始化、常见问题等)。你可以按自己的需求做细微调整,例如自定义安装目录、启用/禁用模块、结合你的 UMIDIGI 数据平台场景等。

说明:官方源码安装说明见文档第 17 章:《Installation from Source Code》。(PostgreSQL)
本指南假定你已具备 root 或 sudo 权限用户,并对 Linux 基础命令熟悉。


一、环境准备

  1. 更新系统
1
2
sudo dnf update -y
sudo reboot
  1. 安装开发工具及依赖库(RHEL/Rocky Linux 9 常见)
1
2
3
4
sudo dnf groupinstall -y "Development Tools"
sudo dnf install -y wget bzip2 libyaml-devel readline-devel \
zlib-devel openssl-devel libxml2-devel libxslt-devel \
libicu-devel perl-ExtUtils‑MakeMaker python3‑devel

(根据你希望启用的 PostgreSQL 特性,可能还要 libssl-devel, zlib-devel, libxml2-devel 等)
这一步参考自安装 PostgreSQL 源码的一般指导。(LFCS认证准备电子书)

  1. (可选)若你希望启用某些扩展或模块,还可能需要额外库,如 libldap, readline, pam-devel 等。建议先确认你的系统上是否缺少 libpq‑dev 或类似依赖。
  2. 创建一个专用用户(如果你愿意,通常 PostgreSQL 安装后会创建 “postgres” 用户)
1
2
sudo useradd -r -M -d /var/lib/pgsql postgres
sudo passwd -l postgres

(只是预备,如源码安装脚本可能也会创建这个用户)

  1. 设置安装目录与数据目录变量(可选)
    例如:
1
2
INSTALL_PREFIX=/usr/local/pgsql18
DATA_DIR=/data/pgsql18data

确保 /data/pgsql18data 有适当权限(postgres 用户可读写)。


二、下载源码并解压

  1. 进入适当目录
1
cd /usr/local/src
  1. 下载 PostgreSQL 18 源码包
    你可以到官方源码下载页面查找最新版。(PostgreSQL)
    例如(假设版本号为 18.0):
1
wget https://ftp.postgresql.org/pub/source/v18.0/postgresql-18.0.tar.bz2
  1. 解压:
1
2
tar -xjf postgresql-18.0.tar.bz2
cd postgresql-18.0

三、配置(configure)编译选项

在源码目录中运行 ./configure,指定安装路径、数据目录、启用/禁用特性等。示例:

1
2
3
4
5
6
7
8
9
10
./configure --prefix=$INSTALL_PREFIX \
--with-includes=/usr/include \
--with-libraries=/usr/lib64 \
--with-openssl \
--with-libxml \
--with-libxslt \
--with-icu \
--with-perl \
--with-python \
--with-zlib

你可依据需要加上 --enable-debug(调试版本)、--enable-cassert(断言检测)等。
官方文档说明了可选参数。(PostgreSQL)

提示:

  • 如果之前通过 dnf 安装了系统 postgresql 包,可能会出现库冲突,建议先移除或禁用系统包。
  • 要确保所有 –with‑xxx 指定的库在系统中已安装其开发(-devel)包。

四、编译并安装

1
2
make -j $(nproc)
sudo make install
  • make -j $(nproc) 用多线程编译加快速度。
  • sudo make install 将源码安装至你指定的 --prefix 目录。

五、初始化数据库集群

  1. 创建数据目录并设置属主
1
2
3
sudo mkdir -p $DATA_DIR
sudo chown postgres:postgres $DATA_DIR
sudo chmod 700 $DATA_DIR
  1. 切换到 postgres 用户(或你之前创建的用户)
1
sudo -iu postgres
  1. 运行初始化命令,例如:
1
2
3
4
$INSTALL_PREFIX/bin/initdb -D $DATA_DIR \
--encoding=UTF8 \
--locale=en_US.UTF-8 \
--data-checksums

你也可使用 --auth-host=md5--auth-local=trust 等参数进行认证策略设定。


六、配置服务启动 / Systemd 单元

  1. 创建 systemd 服务文件 /etc/systemd/system/postgresql18.service,示例内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[Unit]
Description=PostgreSQL 18 database server
After=network.target

[Service]
Type=forking
User=postgres
Group=postgres

# 修改为你的实际路径
ExecStart=/usr/local/pgsql18/bin/pg_ctl start -D /data/pgsql18data -s -l /data/pgsql18data/logfile
ExecStop=/usr/local/pgsql18/bin/pg_ctl stop -D /data/pgsql18data -s -m fast
ExecReload=/usr/local/pgsql18/bin/pg_ctl reload -D /data/pgsql18data -s

[Install]
WantedBy=multi-user.target
  1. 重新加载 systemd,启动服务并设置开机自启:
1
2
3
4
sudo systemctl daemon-reload
sudo systemctl enable postgresql18
sudo systemctl start postgresql18
sudo systemctl status postgresql18

七、基础后续配置

  • 切换为 postgres 用户,进入 psql

    1
    2
    sudo -iu postgres
    psql
  • postgres 超级用户设置密码:

    1
    ALTER USER postgres WITH PASSWORD 'StrongPasswordHere';
  • 修改 pg_hba.conf(位于 $DATA_DIR/pg_hba.conf)根据你的网络要求设置认证方式(如 md5, scram-sha-256 等),修改完重载服务:

    1
    sudo systemctl reload postgresql18
  • 配置远程访问(如允许从其他主机连接)时编辑 postgresql.conf 中的 listen_addresses='*',并在防火墙中开放默认端口 5432。


八、优化建议(基于 Rocky Linux 9)

  • 确保开启 crb(CodeReady Builder)仓库以获取某些 devel 包。(EDB)
  • 在生产环境根据内存/CPU调整 shared_buffers, work_mem, maintenance_work_mem 等。
  • 考虑使用 hugepagestransparent_hugepage=never 等系统优化设定。
  • 定期备份、开启 WAL 日志归档、监控 pg_stat_activity, pg_stat_io 等视图。

九、常见问题 & 解答

  • “我通过 dnf 安装更简单,为什么还要源码?”
    因为你可能需要启用某些尚未被预编译包包含的 扩展、或调优编译选项(如 debug, asserts, 特定 CFLAGS, 第三方 plugins)。
  • “为何系统仓库只提供旧版本?”
    例如在 Rocky Linux 9 默认仓库中,可能只提供版本 13 或类似。(Vultr 文档) 若希望使用最新(如 18),源码安装是可行方案。
  • “依赖报错:找不到某 -devel 包怎么办?”
    检查 CRB 仓库是否启用,并确认你安装了对应库的 devel 包。例如 zlib-devel, readline-devel, libicu-devel。
  • “如何将现有旧版迁移至 18?”
    可以用 pg_dump/pg_restore 或 pg_upgrade(如果兼容)迁移,建议先在测试环境验证。
  • “如果以后需要卸载怎么办?”
    停止服务:systemctl stop postgresql18,删除安装目录、数据目录,移除 systemd 单元。

如果你愿意,我可以 为你生成一份完整的脚本(bash 脚本),涵盖以上所有步骤(包含安装依赖、下载源码、编译、安装、systemd 服务、初始化、优化建议),你看要不要?