ubuntu/debian用apt装postgresql最稳,执行sudo apt install postgresql postgresql-contrib即可;centos/rhel 8+须用官方rpm源装新版;配置前先设密码、再改postgresql.conf和pg_hba.conf,且必须reload服务。

Ubuntu/Debian 上用 apt 安装 PostgreSQL 最稳
直接跑 sudo apt install postgresql postgresql-contrib 就能装好服务端 + 常用扩展。它默认会创建系统用户 postgres,并自动启停 postgresql 服务,不用手动初始化数据目录。
常见错误现象:psql: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed——多半是服务根本没起来,先执行 sudo systemctl status postgresql 看一眼状态,别急着改配置。
- 安装后立即可用,
sudo -u postgres psql就能进默认数据库 -
postgresql-contrib包含pg_stat_statements、hstore等实用扩展,不装后期要手动编译 - Ubuntu 22.04+ 默认装的是 PostgreSQL 14;若需 15 或 16,得加官方源(见下一条)
CentOS/RHEL 8+ 必须用官方 RPM 源
系统自带的 postgresql-server 版本太老(RHEL 8 是 10.x),连 JSONB 都不全,生产环境别碰。必须换 PostgreSQL Global Development Group 的源。
实操步骤:
- 运行
sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm - 禁用系统自带源:
sudo dnf -qy module disable postgresql - 再装:
sudo dnf install -y postgresql16-server postgresql16-contrib - 初始化:
sudo /usr/pgsql-16/bin/postgresql-16-setup initdb
注意路径:二进制和数据目录都带版本号(如 /usr/pgsql-16/),别手抖删错目录。systemd 服务名也变成 postgresql-16,不是 postgresql。
改监听地址和密码前,先切到 postgres 用户
PostgreSQL 默认只监听本地 Unix socket,listen_addresses = 'localhost' 并不等于允许远程连接——它仍拒绝所有 TCP 连接,除非显式设成 '*' 或具体 IP。
修改顺序不能乱:
- 先用
sudo -u postgres psql进去,执行ALTER USER postgres PASSWORD 'xxx';设密码(默认无密码,peer认证不生效) - 再改
/var/lib/pgsql/16/data/postgresql.conf:放开listen_addresses和port - 最后改
pg_hba.conf,加一行:host all all 0.0.0.0/0 md5(测试用,生产请缩窄 IP 段) - 每次改完都要
sudo systemctl reload postgresql-16,不是 restart
容易踩的坑:改完 conf 不 reload,或者 reload 后忘了检查日志(sudo journalctl -u postgresql-16 -n 50),结果连不上还找不到原因。
连接时提示 password authentication failed for user "postgres"
不是密码错了,大概率是认证方式没对上。PostgreSQL 优先按 pg_hba.conf 里最上面匹配的规则走,而不是你想象的“默认用 md5”。
查当前生效规则:sudo -u postgres psql -c "SELECT * FROM pg_hba_file_rules();",重点看 type、database、user_name、auth_method 这几列。
- 如果看到
local all all peer在host规则上面,那本地psql就走 peer,输密码没用 - 远程连接却卡在
md5,但实际连的是ident或reject规则,得看客户端 IP 是否真匹配那条host行 - Windows/macOS 客户端连 Linux 服务器时,DNS 反查失败也会触发 fallback 到
reject,临时加hostnossl规则或关掉reverse_dns
真实部署里,pg_hba.conf 的顺序和精确匹配比密码本身更常成为故障点。










