应优先使用pgdg官方RPM仓库安装PostgreSQL,禁用系统内置postgresql模块后安装,并将数据目录置于独立磁盘以保障I/O性能与空间安全。

直接装官方仓库版,别自己编译,除非你明确需要定制 ICU 或调试符号。源码编译容易卡在 bison、flex 或 perl-ExtUtils-Embed 上,而生产环境几乎不需要那些定制能力。用包管理器装的二进制版本稳定、带 systemd 集成、升级路径清晰,且默认启用 JIT 和 LLVM 优化(PostgreSQL 17 已默认开启)。
怎么选仓库源:优先用 pgdg 官方 RPM,别用系统自带的 postgresql 包
CentOS/RHEL 8+ 或 AlmaLinux/Rocky 8+ 必须禁用内置模块再加 pgdg 源,否则会冲突:
sudo dnf -qy module disable postgresqlsudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %rhel)-x86_64/pgdg-redhat-repo-latest.noarch.rpm
Ubuntu/Debian 用户直接用官网 APT 源(不是 apt install postgresql 默认的旧版),执行:
curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add - echo "deb https://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list sudo apt update
⚠️ 注意:apt install postgresql 在 Ubuntu 22.04/24.04 默认装的是 14 或 15,不是 17;必须显式指定 postgresql-17。
初始化数据目录时,为什么不能用默认路径?
默认路径(如 /var/lib/pgsql/17/data)常位于根分区,小容量系统盘极易被 WAL 日志或临时排序撑爆。更关键的是:PostgreSQL 17 的逻辑复制槽、并行 vacuum、大对象存储对 I/O 延迟更敏感,必须把数据目录放在独立磁盘或 LVM 卷上。
- 创建新目录并赋权:
sudo mkdir -p /mnt/pgdata→sudo chown postgres:postgres /mnt/pgdata→sudo chmod 700 /mnt/pgdata - 初始化:
sudo -u postgres /usr/pgsql-17/bin/initdb -D /mnt/pgdata - 绑定 systemd 服务(避免改
PGDATA环境变量):sudo systemctl edit postgresql-17,写入:[Service] Environment=PGDATA=/mnt/pgdata
然后
sudo systemctl daemon-reload远程访问配错这三处,90% 连不上
不是只改
postgresql.conf就完事。漏掉任意一个,客户端都会报connection refused或no pg_hba.conf entry:-
postgresql.conf中必须设listen_addresses = '*,localhost'(不是'*'就够了,加localhost兼容本地 socket 连接) -
pg_hba.conf末尾加一行:host all all 0.0.0.0/0 md5(别用trust,测试可以,上线即高危) - Linux 防火墙要放行端口:
sudo firewall-cmd --permanent --add-port=5432/tcp→sudo firewall-cmd --reload(Ubuntu 用ufw allow 5432)
改完必须重启服务:
sudo systemctl restart postgresql-17,别只 reload ——listen_addresses是启动时读取的,reload 不生效。最容易被忽略的是 SELinux 上下文:若启用了 SELinux(RHEL/CentOS 默认开启),
/mnt/pgdata目录需打标,否则postgresql-17服务启动失败且日志里只显示“Permission denied”而不提 SELinux。执行sudo semanage fcontext -a -t postgresql_db_t "/mnt/pgdata(/.*)?"→sudo restorecon -Rv /mnt/pgdata。 -


















