环境 :Ubuntu 22.04 / 24.04 LTS | 版本 :PostgreSQL 16 | 适用:生产/测试环境部署
网上很多 PostgreSQL 安装教程要么版本太旧、要么直接用 apt install postgresql 装系统源自带的旧版本,生产环境不推荐。本文使用 PostgreSQL **官方仓库(PGDG)**安装最新稳定版,所有命令可直接复制执行。
目录
- 环境准备
- 添加官方仓库
- 安装 PostgreSQL
- 服务管理
- 设置密码与建库建用户
- 开启远程访问(postgresql.conf + pg_hba.conf)
- 防火墙放行
- 连接验证
- 常见报错排查
一、环境准备
# 查看 Ubuntu 版本(确认 codename)
lsb_release -a
# 更新系统
sudo apt update && sudo apt upgrade -y
# 安装依赖
sudo apt install -y curl ca-certificates gnupg lsb-release
二、添加 PostgreSQL 官方仓库(PGDG)
Ubuntu 默认源的 PostgreSQL 版本较旧,官方仓库提供最新稳定版及安全更新。
# 1. 创建密钥目录
sudo install -d /usr/share/postgresql-common/pgdg
# 2. 下载官方 GPG 密钥
sudo curl -o /usr/share/postgresql-common/pgdg/apt.postgresql.org.asc --fail \
https://www.postgresql.org/media/keys/ACCC4CF8.asc
# 3. 写入仓库源(自动识别系统 codename)
sudo sh -c 'echo "deb [signed-by=/usr/share/postgresql-common/pgdg/apt.postgresql.org.asc] https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
# 4. 刷新软件源
sudo apt update
这一步很关键。如果不加官方仓库,apt install postgresql 装的是系统源里的旧版本(通常是 PG 14 或更早),缺少新特性与安全补丁。
三、安装 PostgreSQL 16
# 安装 PostgreSQL 16(长期支持版)
sudo apt -y install postgresql-16
# 验证版本
psql --version
# 输出示例:psql (PostgreSQL) 16.x
安装过程会自动完成:
- 创建
postgres系统用户 - 创建
postgres数据库超级管理员 - 初始化数据目录
/var/lib/postgresql/16/main/ - 启动服务
四、服务管理
sudo systemctl start postgresql # 启动
sudo systemctl stop postgresql # 停止
sudo systemctl restart postgresql # 重启
sudo systemctl enable postgresql # 开机自启
sudo systemctl status postgresql # 查看状态
看到 Active: active (running) 表示正常运行。
五、设置密码与建库建用户
切换到 postgres 用户,进入 psql:
sudo -i -u postgres
psql
执行 SQL:
-- 1. 给超管设密码
ALTER USER postgres WITH PASSWORD 'YourStrongPass_2026';
-- 2. 创建业务用户
CREATE USER appuser WITH PASSWORD 'AppUserPass_2026';
-- 3. 创建数据库并指定属主
CREATE DATABASE appdb OWNER appuser;
-- 4. 授权数据库级权限
GRANT ALL PRIVILEGES ON DATABASE appdb TO appuser;
-- 5. 授权 schema 权限(关键!否则用户连进去无法在 public 下建表,PG 15+ 尤其注意)
GRANT ALL ON SCHEMA public TO appuser;
-- 6. 查看数据库列表
\l
-- 7. 退出
\q
注意:示例密码仅作演示,生产环境务必使用 12 位以上强密码(字母+数字+符号组合)。
六、开启远程访问
默认 PostgreSQL 只监听 127.0.0.1,无法远程连接。需改两个文件。
6.1 改 postgresql.conf
sudo nano /etc/postgresql/16/main/postgresql.conf
搜索 listen_addresses,取消注释并改为监听所有地址:
listen_addresses = '*'
6.2 改 pg_hba.conf
sudo nano /etc/postgresql/16/main/pg_hba.conf
在 # IPv4 local connections 段下方添加(按你的实际网段调整):
# 类型 数据库 用户 地址 认证方式
host all all 192.168.1.0/24 scram-sha-256
认证方式说明
scram-sha-256:PG 10 引入、14 起默认的认证方式,基于 SCRAM 挑战响应,比 md5 安全得多,强烈推荐md5:旧版兼容用,安全性较低trust:免密,生产环境严禁
生产环境不要 把地址写成 0.0.0.0/0 对公网开放,应限定内网网段或跳板机 IP。
6.3 重启服务生效
reload 与 restart 的区别(重要)
-
listen_addresses是 postmaster 级参数,修改后必须 restart,reload 无效------所以本步骤必须用 restart -
pg_hba.conf修改只需重载 (不中断现有连接):sudo systemctl reload postgresql或 psql 里SELECT pg_reload_conf(); -
本文同时改了
postgresql.conf和pg_hba.conf,故用 restart 一次让两者都生效因 listen_addresses 必须 restart,这里用 restart 一次性让两项配置都生效
sudo systemctl restart postgresql
七、防火墙放行
# UFW 防火墙放行 5432
sudo ufw allow 5432/tcp
sudo ufw status
云服务器额外步骤 :阿里云/腾讯云/华为云等,还需在云控制台 → 安全组中添加入站规则,放行 TCP 5432 端口。这是新手最常遗漏的一步,导致本地配置都对却连不上。
八、连接验证
在另一台机器上测试连接:
# 命令行
psql -h 服务器IP -p 5432 -U appuser -d appdb
# 或用图形工具:DBeaver / pgAdmin / Navicat
# 主机:服务器IP 端口:5432 用户:appuser 数据库:appdb
成功进入 psql 或图形工具连上库,部署完成。
九、常见报错排查
报错1:connection refused / 连接超时
排查四件套(按顺序检查):
listen_addresses是否改为'*'并重启pg_hba.conf是否放行了客户端 IP 段- UFW 防火墙是否放行 5432
- 云安全组是否放行 5432(云服务器必查)
报错2:password authentication failed for user
原因:pg_hba.conf 里的认证方式与用户密码存储方式不匹配。
-- 检查用户密码加密方式
\password appuser
-- 或查看 pg_hba.conf 的 METHOD 列是否为 scram-sha-256
改完 pg_hba.conf 必须 sudo systemctl reload postgresql 或 restart 重新加载。
报错3:FATAL: database "xxx" does not exist
连接时 -d 指定的库不存在。默认连接会找与用户同名的库,用 \l 查看现有数据库,确认库名拼写。
报错4:Unit postgresql.service could not be found
未安装成功或版本号路径不对。确认 /etc/postgresql/16/main/ 目录存在,dpkg -l | grep postgresql 确认安装包。
十、总结
部署成功自检清单
psql --version输出 16.xsystemctl status postgresql显示 active (running)- postgres 超管已设强密码
- 业务库 appdb + 用户 appuser 已建并授权
- (如需远程)远程机器能成功连接
本篇覆盖了 Ubuntu 上 PostgreSQL 的完整部署。后续会更新主从流复制、pg_dump 备份恢复、慢查询优化、Patroni 高可用等进阶实战,欢迎关注专栏。
觉得有用就点个赞收藏吧,部署时回来对着抄就行。
本文关键词:Ubuntu安装PostgreSQL、PostgreSQL16安装、PG部署、pg_hba.conf配置、远程连接、数据库安装教程、scram-sha-256
参考:PostgreSQL官方文档 postgresql.org/docs | PGCCC pgccc.com.cn