下面是一份在 PostgreSQL 18 版本中,从源码在 Rocky Linux Project 9 上编译安装的“阶段‑分步”指南(含环境准备、编译、安装、初始化、常见问题等)。你可以按自己的需求做细微调整,例如自定义安装目录、启用/禁用模块、结合你的 UMIDIGI 数据平台场景等。
说明:官方源码安装说明见文档第 17 章:《Installation from Source Code》。(PostgreSQL)
本指南假定你已具备 root 或 sudo 权限用户,并对 Linux 基础命令熟悉。
- 一、环境准备
- 二、下载源码并解压
- 三、配置(configure)编译选项
- 四、编译并安装
- 五、初始化数据库集群
- 六、配置服务启动 / Systemd 单元
- 七、基础后续配置
- 八、优化建议(基于 Rocky Linux 9)
- 九、常见问题 & 解答
一、环境准备
- 更新系统
1 | sudo dnf update -y |
- 安装开发工具及依赖库(RHEL/Rocky Linux 9 常见)
1 | sudo dnf groupinstall -y "Development Tools" |
(根据你希望启用的 PostgreSQL 特性,可能还要 libssl-devel, zlib-devel, libxml2-devel 等)
这一步参考自安装 PostgreSQL 源码的一般指导。(LFCS认证准备电子书)
- (可选)若你希望启用某些扩展或模块,还可能需要额外库,如
libldap,readline,pam-devel等。建议先确认你的系统上是否缺少libpq‑dev或类似依赖。 - 创建一个专用用户(如果你愿意,通常 PostgreSQL 安装后会创建 “postgres” 用户)
1 | sudo useradd -r -M -d /var/lib/pgsql postgres |
(只是预备,如源码安装脚本可能也会创建这个用户)
- 设置安装目录与数据目录变量(可选)
例如:
1 | INSTALL_PREFIX=/usr/local/pgsql18 |
确保 /data/pgsql18data 有适当权限(postgres 用户可读写)。
二、下载源码并解压
- 进入适当目录
1 | cd /usr/local/src |
- 下载 PostgreSQL 18 源码包
你可以到官方源码下载页面查找最新版。(PostgreSQL)
例如(假设版本号为 18.0):
1 | wget https://ftp.postgresql.org/pub/source/v18.0/postgresql-18.0.tar.bz2 |
- 解压:
1 | tar -xjf postgresql-18.0.tar.bz2 |
三、配置(configure)编译选项
在源码目录中运行 ./configure,指定安装路径、数据目录、启用/禁用特性等。示例:
1 | ./configure --prefix=$INSTALL_PREFIX \ |
你可依据需要加上 --enable-debug(调试版本)、--enable-cassert(断言检测)等。
官方文档说明了可选参数。(PostgreSQL)
提示:
- 如果之前通过
dnf安装了系统 postgresql 包,可能会出现库冲突,建议先移除或禁用系统包。 - 要确保所有
–with‑xxx指定的库在系统中已安装其开发(-devel)包。
四、编译并安装
1 | make -j $(nproc) |
make -j $(nproc)用多线程编译加快速度。sudo make install将源码安装至你指定的--prefix目录。
五、初始化数据库集群
- 创建数据目录并设置属主
1 | sudo mkdir -p $DATA_DIR |
- 切换到 postgres 用户(或你之前创建的用户)
1 | sudo -iu postgres |
- 运行初始化命令,例如:
1 | $INSTALL_PREFIX/bin/initdb -D $DATA_DIR \ |
你也可使用 --auth-host=md5、--auth-local=trust 等参数进行认证策略设定。
六、配置服务启动 / Systemd 单元
- 创建 systemd 服务文件
/etc/systemd/system/postgresql18.service,示例内容如下:
1 | [Unit] |
- 重新加载 systemd,启动服务并设置开机自启:
1 | sudo systemctl daemon-reload |
七、基础后续配置
切换为 postgres 用户,进入
psql:1
2sudo -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等。 - 考虑使用
hugepages、transparent_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 服务、初始化、优化建议),你看要不要?