最稳妥方式是用YUM安装PostgreSQL 15官方仓库包:先添加pgdg源,禁用系统冲突模块,再安装postgresql15-server,手动执行initdb初始化,最后启动服务并验证状态。
直接用系统包管理器装 postgresql15-server 是最稳妥的选择,除非你明确需要定制编译选项(比如启用 llvmjit)或部署非仓库版本。源码编译看似灵活,但容易卡在依赖、路径、权限、systemd 配置这四关。
官方仓库比系统自带的更及时,也避免了版本混杂。关键不是“能不能装”,而是“装完能不能立刻 initdb”。常见失败点是没禁用系统自带模块或漏掉初始化步骤。
sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %rhel)-x86_64/pgdg-redhat-repo-latest.noarch.rpm
sudo dnf module reset postgresql && sudo dnf module enable postgresql:15
sudo dnf install -y postgresql15-server(注意不是 postgresql-server)sudo /usr/pgsql-15/bin/postgresql-15-setup initdb —— 这步必须手动执行,不运行就不会生成 /var/lib/pgsql/15/data
sudo systemctl start postgresql-15,检查状态:sudo systemctl status postgresql-15
不是所有“编译成功”都等于“能用”。最常踩的坑是 initdb 报错 could not identify a default data directory 或 permission denied,根源几乎都在用户、目录、PATH 三者没对齐。
readline-devel、zlib-devel、openssl-devel、libxml2-devel 缺一不可;perl-ExtUtils-Embed 影响 PL/Perl 支持./configure --prefix=/usr/local/pgsql15 后,必须用对应路径下的 initdb,比如:/usr/local/pgsql15/bin/initdb -D /var/lib/pgsql/15/data
postgres 用户拥有:sudo chown -R postgres:postgres /var/lib/pgsql/15/data
ExecStart 必须显式指定 -D ${PGDATA},不能只写 pg_ctl start,否则它会去默认路径找psql?检查这三处装完启动了,但切到 postgres 用户执行 psql 提示 command not found 或 peer 认证失败,问题不在数据库本身,而在环境和配置。
/usr/pgsql-15/bin(或你自定义的 bin 路径)已加入 /etc/profile 并执行了 source /etc/profile
sudo -u postgres psql 才是正确姿势,直接 su postgres 再 psql 可能因 shell 环境变量缺失而失败pg_hba.conf 默认只允许本地 peer 认证,首次登录不要加 -h 127.0.0.1,否则会走 md5 流程而你还没设密码;先用 sudo -u postgres psql -U postgres 进去再 ALTER USER postgres PASSWORD 'xxx';
真正麻烦的从来不是“怎么装”,而是装完发现 initdb 没跑、pg_ctl 找不到、psql 报 peer 拒绝——这些都不是 PostgreSQL 的 bug,是路径、用户、权限、配置项之间没咬合上。每一步执行后,花 10 秒验证输出是否符合预期,比重装三次都快。