PostgreSQL在Linux各发行版安装差异大:Ubuntu/Debian用apt自动启服务,数据目录为/var/lib/postgresql//main;RHEL系需dnf启用模块并手动initdb,数据目录为/var/lib/pgsql//data;启动失败优先查journalctl日志、目录权限及postmaster.pid残留;首次登录须sudo -u postgres psql设密码并修改pg_hba.conf后reload。
PostgreSQL 在主流 Linux 发行版上安装非常直接,但不同发行版的包名、服务名、数据目录和默认用户权限差异较大——不注意这些细节,容易卡在启动失败、连接拒绝或权限拒绝上。
Ubuntu/Debian 上用 apt 安装 PostgreSQL
Ubuntu 20.04+ 和 Debian 11+ 默认源里已包含较新版本(如 PostgreSQL 14/15),无需手动加仓库:
- 运行
sudo apt update && sudo apt install postgresql postgresql-contrib - 安装后服务自动启用并启动,主进程由
systemd管理,服务名为postgresql - 默认创建系统用户
postgres,数据库超级用户也叫postgres,但无密码,仅允许peer或ident认证(即本地 Unix socket 登录需匹配系统用户名) - 数据目录通常是
/var/lib/postgresql/*/main(*为版本号),配置文件在/etc/postgresql/*/main/下
CentOS/RHEL/Rocky 9+ 使用 dnf 安装
RHEL 系发行版从 9 开始默认使用 PostgreSQL 13+,但需启用 postgresql:releases 模块(旧版如 CentOS 7 需启用 pgdg 仓库):
- Rocky 9 / RHEL 9:运行
sudo dnf module enable postgresql:15(或:16),再执行sudo dnf install postgresql-server postgresql-contrib - 初始化数据库簇:必须显式运行
sudo postgresql-setup --initdb,否则systemctl start postgresql会失败并报错data directory has wrong ownership - 服务名是
postgresql,但实际 unit 文件可能带版本后缀(如postgresql-15),建议用systemctl list-units | grep postgres确认 - 默认监听地址为
localhost,且pg_hba.conf中对local连接默认使用peer,远程host条目默认被注释
启动失败常见原因与快速排查
执行 sudo systemctl start postgresql 后状态为 failed,别急着重装,先看三处: