Skip to content

PostgreSQL 包管理器安装

Debian/Ubuntu 系统安装

Debian 和 Ubuntu 是最常用的 Linux 发行版之一,PostgreSQL 官方提供了针对这些系统的专门仓库,支持多种版本的安装。

支持的版本

  • Debian:9(Stretch)、10(Buster)、11(Bullseye)、12(Bookworm)
  • Ubuntu:18.04(Bionic)、20.04(Focal)、22.04(Jammy)、24.04(Noble)

使用官方 PostgreSQL 仓库

PostgreSQL 官方仓库提供了最新版本的 PostgreSQL,推荐使用官方仓库进行安装,以获得最新的功能和安全更新。

  1. 添加 PostgreSQL 仓库密钥

首先需要下载并安装 PostgreSQL 官方仓库的 GPG 密钥,以验证包的完整性和真实性。

bash
# 下载并安装仓库密钥
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
  1. 添加 PostgreSQL 仓库

根据您的 Debian 或 Ubuntu 版本,添加相应的 PostgreSQL 仓库。官方仓库包含了所有支持的 PostgreSQL 版本。

bash
# Debian 12 (Bookworm)
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ bookworm-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

# Debian 11 (Bullseye)
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ bullseye-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

# Ubuntu 24.04 (Noble)
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ noble-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

# Ubuntu 22.04 (Jammy)
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ jammy-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

# Ubuntu 20.04 (Focal)
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ focal-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
  1. 更新包列表

添加仓库后,需要更新系统的包列表,以获取 PostgreSQL 相关的包信息。

bash
sudo apt update
  1. 安装 PostgreSQL

可以根据需要安装最新版本的 PostgreSQL,或者指定特定版本。同时,还可以安装客户端工具和开发库。

bash
# 安装最新版本
sudo apt install postgresql

# 安装特定版本(如16)
sudo apt install postgresql-16

# 安装客户端工具
sudo apt install postgresql-client-16

# 安装开发库
sudo apt install libpq-dev

使用系统默认仓库

如果您不需要最新版本的 PostgreSQL,也可以使用系统默认仓库中的版本。默认仓库中的版本通常比较稳定,但可能不是最新的。

bash
# 更新包列表
sudo apt update

# 安装默认版本
sudo apt install postgresql postgresql-client

验证安装

安装完成后,需要验证 PostgreSQL 是否成功安装并正常运行。可以通过检查服务状态、版本信息和连接测试来验证。

bash
# 检查PostgreSQL服务状态
sudo systemctl status postgresql

# 检查PostgreSQL版本
psql --version

# 连接到PostgreSQL
sudo -u postgres psql

RHEL/CentOS 系统安装

Red Hat Enterprise Linux (RHEL) 和 CentOS 是企业环境中常用的 Linux 发行版,PostgreSQL 官方同样提供了专门的仓库支持。

支持的版本

  • RHEL/CentOS:7、8、9
  • Rocky Linux:8、9
  • AlmaLinux:8、9

使用官方 PostgreSQL 仓库

对于 RHEL/CentOS 及其衍生版本,推荐使用 PostgreSQL 官方仓库进行安装,以获得最新的版本和长期支持。

  1. 安装 PostgreSQL 仓库

首先需要安装 PostgreSQL 官方仓库,根据不同的系统版本选择对应的仓库包。

bash
# RHEL/CentOS/Rocky Linux/AlmaLinux 9
sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm

# RHEL/CentOS/Rocky Linux/AlmaLinux 8
sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm

# RHEL/CentOS 7
sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
  1. 禁用内置 PostgreSQL 模块(RHEL 8+):

在 RHEL 8 及以上版本中,系统默认提供了 PostgreSQL 模块,需要先禁用该模块,然后才能安装官方仓库中的版本。

bash
sudo dnf module disable -y postgresql
  1. 安装 PostgreSQL

根据系统版本选择合适的安装命令,这里以 PostgreSQL 16 为例。在 RHEL 7 上使用 yum,在 RHEL 8+ 上使用 dnf。

bash
# RHEL 9/CentOS 9/Rocky Linux 9/AlmaLinux 9
sudo dnf install -y postgresql16-server postgresql16-contrib

# RHEL 8/CentOS 8/Rocky Linux 8/AlmaLinux 8
sudo dnf install -y postgresql16-server postgresql16-contrib

# RHEL 7/CentOS 7
sudo yum install -y postgresql16-server postgresql16-contrib
  1. 初始化数据库集群

安装完成后,需要初始化 PostgreSQL 数据库集群,创建必要的目录结构和配置文件。

bash
# RHEL 9/CentOS 9/Rocky Linux 9/AlmaLinux 9
sudo /usr/pgsql-16/bin/postgresql-16-setup initdb

# RHEL 8/CentOS 8/Rocky Linux 8/AlmaLinux 8
sudo /usr/pgsql-16/bin/postgresql-16-setup initdb

# RHEL 7/CentOS 7
sudo /usr/pgsql-16/bin/postgresql-16-setup initdb
  1. 启动并启用服务

初始化完成后,需要启动 PostgreSQL 服务,并设置为开机自启,确保系统重启后 PostgreSQL 能自动运行。

bash
# RHEL 9/CentOS 9/Rocky Linux 9/AlmaLinux 9
sudo systemctl enable postgresql-16 --now

# RHEL 8/CentOS 8/Rocky Linux 8/AlmaLinux 8
sudo systemctl enable postgresql-16 --now

# RHEL 7/CentOS 7
sudo systemctl enable postgresql-16 --now

使用系统默认仓库

如果您不需要最新版本的 PostgreSQL,也可以使用系统默认仓库中的版本。默认仓库中的版本经过系统厂商的测试,稳定性较高,但版本可能较旧。

bash
# RHEL 9/CentOS 9/Rocky Linux 9/AlmaLinux 9
sudo dnf install -y postgresql-server postgresql-contrib

# RHEL 8/CentOS 8/Rocky Linux 8/AlmaLinux 8
sudo dnf install -y postgresql-server postgresql-contrib

# RHEL 7/CentOS 7
sudo yum install -y postgresql-server postgresql-contrib

# 初始化数据库集群
sudo postgresql-setup initdb

# 启动并启用服务
sudo systemctl enable postgresql --now

验证安装

安装完成后,需要验证 PostgreSQL 是否正常运行。可以通过检查服务状态、版本信息和连接测试来确认。

bash
# 检查PostgreSQL服务状态
sudo systemctl status postgresql-16

# 检查PostgreSQL版本
psql --version

# 连接到PostgreSQL
sudo -u postgres psql

SUSE/openSUSE 系统安装

SUSE Linux Enterprise Server (SLES) 和 openSUSE 是另一个常见的 Linux 发行版系列,PostgreSQL 官方也提供了专门的仓库支持。

支持的版本

  • openSUSE Leap:15.x(稳定版本,每12个月更新一次)
  • openSUSE Tumbleweed:滚动更新版(持续接收最新更新)

安装步骤

对于 SUSE/openSUSE 系统,安装 PostgreSQL 的步骤与其他 Linux 发行版类似,主要包括添加仓库、安装软件包、初始化集群和启动服务。

  1. 添加 PostgreSQL 仓库

首先需要添加 PostgreSQL 官方仓库,根据不同的 openSUSE 版本选择对应的仓库地址。

bash
# openSUSE Leap 15.x
sudo zypper addrepo https://download.postgresql.org/pub/repos/zypp/repo/pgdg-sles15-pg16.repo

# openSUSE Tumbleweed
sudo zypper addrepo https://download.postgresql.org/pub/repos/zypp/repo/pgdg-tumbleweed-pg16.repo
  1. 安装 PostgreSQL

使用 zypper 包管理器安装 PostgreSQL 服务器和相关组件。

bash
sudo zypper install postgresql16-server postgresql16-contrib
  1. 初始化数据库集群

安装完成后,需要初始化 PostgreSQL 数据库集群。

bash
sudo /usr/pgsql-16/bin/postgresql-16-setup initdb
  1. 启动并启用服务

初始化完成后,启动 PostgreSQL 服务并设置为开机自启。

bash
sudo systemctl enable postgresql-16 --now
  1. 验证安装

安装完成后,验证 PostgreSQL 是否正常运行。

bash
psql --version
sudo -u postgres psql

配置 PostgreSQL

安装完成后,需要对 PostgreSQL 进行基本配置,包括修改监听地址、配置客户端认证和设置管理员密码等。

修改监听地址

默认情况下,PostgreSQL 只监听本地回环地址(localhost),这意味着只能从本机访问数据库。如果需要从其他机器访问 PostgreSQL,需要修改监听地址。

  1. 编辑 postgresql.conf

首先需要编辑 PostgreSQL 的主要配置文件 postgresql.conf,修改监听地址设置。

bash
# 对于PostgreSQL 16
sudo vi /var/lib/pgsql/16/data/postgresql.conf

# 对于默认版本
sudo vi /var/lib/pgsql/data/postgresql.conf
  1. 修改监听地址

在配置文件中找到 listen_addresses 参数,将其值从 localhost 改为 *,表示监听所有可用的网络接口。

txt
# 将监听地址从localhost改为*
listen_addresses = '*'
  1. 重启服务

修改配置后,需要重启 PostgreSQL 服务才能使更改生效。

bash
sudo systemctl restart postgresql-16

配置客户端认证

PostgreSQL 使用 pg_hba.conf 文件来控制客户端的访问认证。默认情况下,只允许本地用户通过信任方式连接。如果需要从其他机器连接,需要修改认证规则。

  1. 编辑 pg_hba.conf

首先需要编辑 pg_hba.conf 文件,添加或修改客户端认证规则。

bash
# 对于PostgreSQL 16
sudo vi /var/lib/pgsql/16/data/pg_hba.conf

# 对于默认版本
sudo vi /var/lib/pgsql/data/pg_hba.conf
  1. 添加客户端认证规则

在配置文件中添加或修改客户端认证规则,允许特定 IP 地址或 IP 段使用密码认证连接到 PostgreSQL。

txt
# 允许所有IP地址使用密码认证
host    all             all             0.0.0.0/0               scram-sha-256
host    all             all             ::/0                    scram-sha-256

# 允许特定IP段使用密码认证
host    all             all             192.168.1.0/24          scram-sha-256
  1. 重启服务

修改认证规则后,需要重启 PostgreSQL 服务才能使更改生效。

bash
sudo systemctl restart postgresql-16

设置 postgres 用户密码

postgres 用户是 PostgreSQL 数据库的超级用户,默认情况下没有密码(或使用 ident 认证)。为了安全起见,应该为 postgres 用户设置一个强密码。

bash
# 连接到PostgreSQL
sudo -u postgres psql

# 设置密码
ALTER USER postgres WITH PASSWORD 'your_secure_password';

# 退出
\q

安装多个 PostgreSQL 版本

在某些情况下,您可能需要在同一台服务器上安装多个 PostgreSQL 版本,例如进行版本升级测试、应用兼容性测试或同时运行不同版本的应用程序。

Debian/Ubuntu 系统

在 Debian/Ubuntu 系统上,PostgreSQL 的不同版本可以并行安装,每个版本使用不同的服务名称和端口号。

bash
# 安装PostgreSQL 15和16
sudo apt install postgresql-15 postgresql-16

# 安装对应的客户端工具
sudo apt install postgresql-client-15 postgresql-client-16

# 查看所有PostgreSQL服务
sudo systemctl list-units --type=service | grep postgresql

# 启动特定版本
sudo systemctl start postgresql@15-main
sudo systemctl start postgresql@16-main

# 连接到特定版本
psql -h localhost -p 5432 -U postgres  # PostgreSQL 15
psql -h localhost -p 5433 -U postgres  # PostgreSQL 16

RHEL/CentOS 系统

在 RHEL/CentOS 系统上,多个 PostgreSQL 版本也可以并行安装,但需要手动调整端口号以避免冲突。

bash
# 安装PostgreSQL 15和16
sudo dnf install postgresql15-server postgresql16-server

# 初始化两个版本的数据库集群
sudo /usr/pgsql-15/bin/postgresql-15-setup initdb
sudo /usr/pgsql-16/bin/postgresql-16-setup initdb

# 修改PostgreSQL 15的端口为5432
sudo vi /var/lib/pgsql/15/data/postgresql.conf
# port = 5432

# 修改PostgreSQL 16的端口为5433
sudo vi /var/lib/pgsql/16/data/postgresql.conf
# port = 5433

# 启动并启用两个版本
sudo systemctl enable postgresql-15 --now
sudo systemctl enable postgresql-16 --now

# 连接到特定版本
psql -h localhost -p 5432 -U postgres  # PostgreSQL 15
psql -h localhost -p 5433 -U postgres  # PostgreSQL 16

包管理器安装的优势与劣势

使用包管理器安装 PostgreSQL 有其明显的优势和劣势,了解这些优缺点可以帮助您做出更合适的安装选择。

优势

  • 安装简单:通过包管理器可以实现一键安装,无需手动编译源代码,大大简化了安装过程,特别适合初学者和快速部署场景。
  • 自动依赖管理:包管理器会自动处理 PostgreSQL 所需的所有依赖关系,确保所有必要的库和工具都被正确安装。
  • 版本管理:支持在同一台服务器上安装多个 PostgreSQL 版本,方便进行版本升级测试、应用兼容性测试和迁移工作。
  • 自动更新:通过包管理器可以轻松更新到最新版本,确保系统始终使用最新的安全补丁和功能改进。
  • 标准化配置:遵循系统的标准配置和服务管理方式,与系统的其他服务保持一致,便于统一管理和维护。
  • 社区支持:有大量的文档和社区支持,遇到问题时可以更容易地找到解决方案和帮助。

劣势

  • 版本滞后:系统默认仓库的 PostgreSQL 版本可能滞后于官方发布的最新版本,无法及时获取最新功能。
  • 配置灵活性:配置选项可能受到包管理器的限制,无法完全按照自己的需求进行定制。
  • 自定义编译选项:无法使用自定义的编译选项来优化 PostgreSQL 的性能或功能。
  • 数据目录固定:数据目录位置通常是固定的,无法根据需要灵活调整。
  • 升级限制:跨版本升级可能需要手动操作,无法完全自动化,增加了升级的复杂性和风险。

版本选择建议

选择合适的 PostgreSQL 版本对于系统的稳定性、性能和安全性至关重要。不同的环境和需求可能需要不同的版本选择策略。

生产环境

在生产环境中,稳定性和可靠性是最重要的考虑因素,因此应该选择成熟、稳定且长期支持的版本。

  • 推荐版本:PostgreSQL 14、15或16。这些版本都处于长期支持阶段,拥有良好的稳定性和安全性。
  • 支持期限:PostgreSQL 14支持到2026年11月,PostgreSQL 15支持到2027年11月,PostgreSQL 16支持到2028年11月。选择支持期限较长的版本可以减少频繁升级带来的风险和工作量。
  • 稳定性:建议选择发布至少6个月以上的版本,确保主要bug已修复,系统运行稳定。
  • 兼容性:在选择版本之前,应该确保应用程序与所选版本兼容,特别是对于使用了特定特性或扩展的应用程序。

开发环境

在开发环境中,可以更加灵活地选择 PostgreSQL 版本,以满足开发和测试需求。

  • 推荐版本:可以使用最新稳定版或与生产环境相同的版本。使用最新稳定版可以提前体验新特性,而使用与生产环境相同的版本可以确保开发和测试环境的一致性。
  • 测试新特性:对于需要测试新特性的开发工作,可以使用beta版本或预览版,但不建议在生产环境中使用这些版本。
  • 多版本测试:建议在不同版本的 PostgreSQL 上测试应用程序兼容性,确保应用程序能够在不同版本上正常运行,便于后续的版本升级和迁移。

常见问题(FAQ)

Q1: 如何查看已安装的PostgreSQL版本?

A1: 可以使用以下命令查看已安装的PostgreSQL版本:

bash
psql --version

Q2: 如何切换默认的PostgreSQL版本?

A2: 在Debian/Ubuntu系统上,可以使用update-alternatives命令切换默认版本:

bash
sudo update-alternatives --config pgsql-psql
sudo update-alternatives --config pgsql-pg_dump

Q3: 如何卸载PostgreSQL?

A3: 可以使用包管理器卸载PostgreSQL:

bash
# Debian/Ubuntu
sudo apt purge postgresql-16 postgresql-client-16

# RHEL/CentOS
sudo dnf remove postgresql16-server postgresql16-contrib

# 删除数据目录
sudo rm -rf /var/lib/pgsql/16

Q4: 如何升级PostgreSQL版本?

A4: 跨版本升级建议使用pg_upgrade工具:

bash
# 安装新版本
sudo apt install postgresql-16

# 初始化新版本集群
sudo /usr/lib/postgresql/16/bin/initdb -D /var/lib/postgresql/16/main

# 停止两个版本的服务
sudo systemctl stop postgresql-15 postgresql-16

# 使用pg_upgrade升级
sudo -u postgres /usr/lib/postgresql/16/bin/pg_upgrade \
  -b /usr/lib/postgresql/15/bin \
  -B /usr/lib/postgresql/16/bin \
  -d /var/lib/postgresql/15/main \
  -D /var/lib/postgresql/16/main

# 启动新版本
sudo systemctl start postgresql-16

Q5: 如何安装特定版本的PostgreSQL?

A5: 在安装命令中指定版本号:

bash
# Debian/Ubuntu
sudo apt install postgresql-16

# RHEL/CentOS
sudo dnf install postgresql16-server

Q6: 如何查看PostgreSQL服务状态?

A6: 使用systemctl命令查看服务状态:

bash
sudo systemctl status postgresql-16

Q7: 如何修改PostgreSQL的数据目录?

A7: 修改数据目录需要重新初始化数据库集群:

bash
# 停止服务
sudo systemctl stop postgresql-16

# 复制数据目录
sudo cp -a /var/lib/pgsql/16/data /new/data/path

# 修改postgresql.service文件
sudo vi /usr/lib/systemd/system/postgresql-16.service
# 修改Environment=PGDATA=/var/lib/pgsql/16/data为新路径

# 重新加载systemd配置
sudo systemctl daemon-reload

# 启动服务
sudo systemctl start postgresql-16

Q8: 如何配置PostgreSQL允许远程连接?

A8: 需要修改两个配置文件:

  1. 在postgresql.conf中修改listen_addresses = '*'
  2. 在pg_hba.conf中添加允许远程连接的规则
  3. 重启PostgreSQL服务

Q9: 如何检查PostgreSQL的日志文件?

A9: 日志文件通常位于:

bash
# 对于PostgreSQL 16
/var/lib/pgsql/16/data/log

# 对于默认版本
/var/lib/pgsql/data/log

# 也可以通过journalctl查看
sudo journalctl -u postgresql-16

Q10: 如何设置PostgreSQL的自动启动?

A10: 使用systemctl enable命令设置自动启动:

bash
sudo systemctl enable postgresql-16