本文演示 PostgreSQL 在 Ubuntu 22.04 / 24.04 上的完整安装部署流程,涵盖:添加官方仓库、安装数据库、初始化配置、创建用户与数据库、开启远程访问、防火墙放行。所有命令均可直接复制执行,末尾附常见问题排查。
本次以 PostgreSQL 16(长期支持版)为例,企业生产环境最常用。如需其他版本,将命令中的 16 替换为目标版本号即可。
开始前确认系统环境:
# 查看 Ubuntu 版本 lsb_release -a # 更新系统软件包 sudo apt update && sudo apt upgrade -y # 安装必要依赖 sudo apt install -y curl ca-certificates gnupg lsb-release
Ubuntu 默认源里的 PostgreSQL 版本较旧,推荐添加 PostgreSQL 官方 APT 仓库(PGDG)以获取最新稳定版:
# 创建密钥目录 sudo install -d /usr/share/postgresql-common/pgdg # 下载官方 GPG 密钥 sudo curl -o /usr/share/postgresql-common/pgdg/apt.postgresql.org.asc --fail \ https://www.postgresql.org/media/keys/ACCC4CF8.asc # 添加仓库源 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' # 刷新软件源 sudo apt update
# 安装 PostgreSQL 16 sudo apt -y install postgresql-16 # 验证安装 psql --version
安装完成后,PostgreSQL 会自动创建一个名为 postgres 的系统用户和数据库超级管理员账户。
# 启动服务 sudo systemctl start postgresql # 设置开机自启 sudo systemctl enable postgresql # 查看运行状态 sudo systemctl status postgresql
看到 active (running) 即表示服务正常运行。
PostgreSQL 默认以 postgres 用户运行,先切换到该用户进入数据库命令行:
# 切换到 postgres 用户 sudo -i -u postgres # 进入 psql psql
在 psql 中执行以下 SQL:
-- 为 postgres 超管账户设置强密码 ALTER USER postgres WITH PASSWORD 'YourStrongPass_2026'; -- 创建业务用户 CREATE USER appuser WITH PASSWORD 'AppUserPass_2026'; -- 创建数据库并指定属主 CREATE DATABASE appdb OWNER appuser; -- 授权数据库级权限 GRANT ALL PRIVILEGES ON DATABASE appdb TO appuser; -- 授权 public schema 权限(否则用户连进去无法在 public 下建表,PG 15+ 尤其要注意) GRANT ALL ON SCHEMA public TO appuser; -- 退出 \q
默认 PostgreSQL 只监听本机。如需远程连接,需修改两个配置文件。
sudo nano /etc/postgresql/16/main/postgresql.conf
找到 listen_addresses,取消注释并改为:
listen_addresses = '*'
sudo nano /etc/postgresql/16/main/pg_hba.conf
在文件末尾添加(允许指定网段用密码远程连接):
# 允许 192.168.1.0/24 网段远程访问(按实际网段调整) host all all 192.168.1.0/24 scram-sha-256
0.0.0.0/0 对公网开放。应限定具体内网网段或跳板机 IP,配合 VPN/堡垒机使用。scram-sha-256 是 PostgreSQL 10+ 推荐的安全认证方式(基于 SCRAM 挑战响应,比 md5 更安全)。注意 restart 与 reload 的区别:
listen_addresses 属于 postmaster 级参数,修改后必须 restart 才能生效,reload 无效——因此本步骤必须用 restart。
pg_hba.conf 的修改只需重载(不中断现有连接)即可生效:sudo systemctl reload postgresql,或在 psql 中执行 SELECT pg_reload_conf();。
# 因 listen_addresses 必须 restart,这里用 restart 一次性让两项配置都生效 sudo systemctl restart postgresql
# 放行 PostgreSQL 默认端口 5432 sudo ufw allow 5432/tcp # 查看防火墙状态 sudo ufw status
若云服务器(如阿里云/腾讯云),还需在云控制台的安全组中放行 5432 端口。
在另一台机器上用 psql 或图形工具(如 DBeaver、pgAdmin)测试连接:
psql -h 服务器IP -p 5432 -U appuser -d appdb
输入密码后成功进入 psql,说明部署完成。
| 问题 | 原因与解决 |
|---|---|
| 连接超时 / 拒绝 | 检查 listen_addresses、pg_hba.conf、防火墙、云安全组四项是否都放行 |
| password authentication failed | pg_hba.conf 认证方式与用户密码加密方式不匹配,确认用 scram-sha-256,改完重启 |
| database does not exist | 连接时 -d 指定的库名不存在,用 \l 查看现有数据库 |
| service not found | 版本号路径不对,确认实际路径 /etc/postgresql/版本号/main/ |
psql --version 能输出版本号systemctl status postgresql 显示 active (running)本文覆盖了 PostgreSQL 在 Ubuntu 上的标准部署流程。后续的主从复制、备份恢复、性能调优、高可用集群等进阶内容,将在本频道持续更新,欢迎关注。
扫码联系我们
电话:19165199818