服务器PostgreSQL教程:从安装到远程连接
先判断你属于哪种安装场景
在服务器上装 PostgreSQL,先看操作系统和用途。
本文以常见的 Linux 服务器为例,覆盖两种主流方式:CentOS 系用 yum,Ubuntu/Debian 系用 apt。
如果你只是想本机开发,装完默认就能用;
如果要给外部程序连接,必须额外配置监听地址和认证规则。
判断依据很简单:
- 系统是 CentOS 7/8、Rocky、AlmaLinux:走 yum 仓库安装。
- 系统是 Ubuntu 20.04/22.04、Debian 11/12:走 apt 安装。
- 无论哪种,装完后都要确认服务状态、端口和认证方式。
安装与初始化
CentOS 系先添加官方仓库再安装,避免系统自带版本过旧:
sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
sudo yum install -y postgresql15-server
sudo /usr/pgsql-15/bin/postgresql-15-setup initdb
sudo systemctl enable --now postgresql-15
Ubuntu/Debian 系直接安装发行版仓库版本即可:
sudo apt update
sudo apt install -y postgresql postgresql-contrib
sudo systemctl enable --now postgresql
装完先验证服务是否在跑:
sudo systemctl status postgresql
sudo -u postgres psql -c "SELECT version();"
如果第二条命令能返回版本号,说明数据库已经可用,默认监听 localhost:5432。
创建业务用户和数据库
不要长期用 postgres 超级用户跑业务。
建议单独建库和账号:
sudo -u postgres psql
进入交互后执行:
CREATE USER appuser WITH PASSWORD '换成强密码';
CREATE DATABASE appdb OWNER appuser;
GRANT ALL PRIVILEGES ON DATABASE appdb TO appuser;
\q
结果验证:用新账号登录一次。
psql -h 127.0.0.1 -U appuser -d appdb -c "SELECT current_user, current_database();"
能返回 appuser 和 appdb 就说明权限正常。
开启远程访问的关键配置
默认情况下 PostgreSQL 只监听本机,外部连不上是正常的。
要远程连接,改两个文件。
第一步,改监听地址。 找到配置文件:
- CentOS:
/var/lib/pgsql/15/data/postgresql.conf - Ubuntu:
/etc/postgresql/<版本>/main/postgresql.conf
把 listen_addresses 改为:
listen_addresses = '*'
第二步,改认证规则。 编辑 pg_hba.conf,在同一数据目录下,追加或修改一行,允许你的来源 IP 网段用密码登录:
host appdb appuser 你的客户端IP/32 scram-sha-256
不要图省事写 0.0.0.0/0 加 trust,那等于任何人都能无密码进库。
第三步,重启并放行端口。
sudo systemctl restart postgresql
sudo firewall-cmd --add-port=5432/tcp --permanent && sudo firewall-cmd --reload
Ubuntu 用 ufw allow 5432/tcp。
云服务器还要在安全组里放行 5432,只对你自己的 IP 开放。
避坑与验证
连不上时按顺序查:
ss -lntp | grep 5432看端口是否监听在0.0.0.0或::,只显示127.0.0.1说明监听没改对。- 报
no pg_hba.conf entry是认证规则没匹配上,检查 IP 和数据库名。 - 报
password authentication failed先确认密码,再确认认证方式是否为scram-sha-256。 - 改完配置必须重启或
reload,否则不生效。
远程验证:
psql -h 服务器公网IP -U appuser -d appdb -c "SELECT 1;"
返回 1 即连接成功。
生产环境建议再配合定期备份和只对必要 IP 开放端口。
常见疑问
为什么本地能连,远程不行? 多数是 listen_addresses 没改、pg_hba.conf 没加规则,或防火墙和云安全组没放行。
一定要用超级用户吗? 不需要。
日常业务用普通用户,权限按库和表授予,降低误操作风险。
端口能不能换? 可以,在 postgresql.conf 改 port,同步改防火墙和安全组,并重启服务。