Ubuntu 下安装与配置 PostgreSQL 18 完全指南

PostgreSQL 是一个功能强大的开源对象-关系型数据库系统。在 Ubuntu 环境下,您可以通过系统自带源或官方 APT 仓库进行安装。为了获取最新版本和更好的维护支持,推荐使用 PostgreSQL 官方 APT 仓库

1. 安装方式选择

  • **系统自带源 (apt install postgresql)**:安装简单,但版本通常较旧,且在 Ubuntu 版本生命周期内不会更新到新主版本。
  • 官方 APT 仓库:推荐。可以安装任意受支持的版本(如 14, 15, 16, 17, 18),并能获得官方的持续安全更新。

2. 通过官方 APT 仓库安装 PostgreSQL 18

请根据您的 Ubuntu 版本(如 Noble 24.04, Jammy 22.06 等)执行以下步骤。

1. 安装依赖与配置仓库

首先,安装公共文件包并运行官方配置脚本,这会自动处理 GPG 密钥和源列表的配置:

1
2
sudo apt install -y postgresql-common
sudo /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh

提示:如果您需要手动配置(例如在受限环境中),可以参考官方文档导入密钥并创建 /etc/apt/sources.list.d/pgdg.sources 文件,但上述自动化脚本是首选方法。

2. 安装 PostgreSQL 18

更新软件包列表并安装 PostgreSQL 18 服务器:

1
2
sudo apt update
sudo apt install postgresql-18

3. 验证安装

安装完成后,检查服务状态以确保数据库正在运行:

1
sudo systemctl status postgresql

3. 初始配置与安全设置

安装完成后,需要进行基础配置才能安全地使用数据库。

1. 切换到 postgres 用户

PostgreSQL 安装后会自动创建一个名为 postgres 的系统用户和同名的数据库超级用户。首先切换到该用户:

1
sudo -i -u postgres

2. 进入数据库控制台

执行 psql 命令进入交互式终端:

1
psql

此时您已进入 PostgreSQL 控制台,提示符会变为 postgres=#

3. 设置 postgres 用户密码

为了后续能通过密码连接(例如使用图形化工具或应用程序连接),建议立即设置密码:

1
\password postgres

输入该命令后,系统会提示您输入并确认新的强密码。

4. 退出控制台

完成设置后,输入以下命令退出 psql 和 postgres 用户环境:

1
2
\q
exit

4. 配置远程访问(可选)

如果您需要从其他机器连接此数据库,需要修改配置文件。

1. 修改 postgresql.conf

编辑配置文件以允许监听所有 IP 地址。文件通常位于 /etc/postgresql/18/main/ 目录下:

1
sudo nano /etc/postgresql/18/main/postgresql.conf

找到 listen_addresses 行,修改为:

1
listen_addresses = '*'          # 监听所有 IP

注意:如果您修改了默认端口 5432,请在此处一并修改,并在防火墙中开放新端口。

2. 修改 pg_hba.conf

编辑该文件以配置客户端认证。允许特定网段或所有 IP 通过密码连接:

1
sudo nano /etc/postgresql/18/main/pg_hba.conf

在文件末尾添加以下规则(例如允许所有 IPv4 连接):

1
2
# TYPE  DATABASE        USER            ADDRESS                 METHOD
host all all 0.0.0.0/0 md5

3. 重启服务与配置防火墙

使配置生效需要重启服务。同时,确保 Ubuntu 防火墙(UFW)已开放 PostgreSQL 端口:

1
2
sudo systemctl restart postgresql
sudo ufw allow 5432/tcp

5. 总结:连接信息速查

配置完成后,您可以使用以下参数连接数据库:

参数 说明
主机地址 127.0.0.1 或服务器 IP 本地连接用 localhost
端口号 5432 默认端口
数据库名 postgres 默认维护数据库
用户名 postgres 超级用户
密码 您设置的密码 执行 \password 后设定的密码

6. 常见问题排查

  • **连接被拒绝 (Connection refused)**:请检查 postgresql.conf 中的 listen_addresses 是否已设置为 '*',并确认服务已重启。
  • **密码认证失败 (Password authentication failed)**:请检查 pg_hba.conf 中的认证方法是否为 md5scram-sha-256,并确保已执行 systemctl restart postgresql 重载配置。