Ubuntu 安装 PostgreSQL 16 完整教程(2026):从仓库配置到远程连接

环境 :Ubuntu 22.04 / 24.04 LTS | 版本 :PostgreSQL 16 | 适用:生产/测试环境部署

网上很多 PostgreSQL 安装教程要么版本太旧、要么直接用 apt install postgresql 装系统源自带的旧版本,生产环境不推荐。本文使用 PostgreSQL **官方仓库(PGDG)**安装最新稳定版,所有命令可直接复制执行。

目录

  1. 环境准备
  2. 添加官方仓库
  3. 安装 PostgreSQL
  4. 服务管理
  5. 设置密码与建库建用户
  6. 开启远程访问(postgresql.conf + pg_hba.conf)
  7. 防火墙放行
  8. 连接验证
  9. 常见报错排查

一、环境准备

复制代码
# 查看 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.confpg_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 / 连接超时

排查四件套(按顺序检查):

  1. listen_addresses 是否改为 '*' 并重启
  2. pg_hba.conf 是否放行了客户端 IP 段
  3. UFW 防火墙是否放行 5432
  4. 云安全组是否放行 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.x
  • systemctl 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

相关推荐
常乐か2 小时前
在 Ubuntu 24.04 中编译 Qt 5.15.2 项目完全指南
linux·qt·ubuntu
hello_fengfeng2 小时前
fcitx4 和 fcitx5 输入法包冲突
ubuntu
垂直昵称3 小时前
多线程实现网页接口并发压力测试
linux·服务器·windows
jufeng13074 小时前
【系列:MiniKV 原理剖析 · 第 2 篇】
linux·c++·软件工程
王琦03184 小时前
Linux的管理程序
linux·运维·服务器
Crazy________4 小时前
Redis02:库切换、监控与安全配置
linux·redis·云原生·mybatis
Eloudy5 小时前
给 Linux 加新硬盘的挂载命令
linux·运维·服务器
三言老师5 小时前
ss高效查看网络连接端口实操
linux·运维·服务器·网络
三言老师5 小时前
traceroute路由追踪实操
linux·运维·服务器·网络