4.10. 在 RHEL 9 上将 PostgreSQL 实例从以前的 RHEL 版本迁移到 PostgreSQL 13、PostgreSQL 15 或 PostgreSQL 16


如果您已在 RHEL 8 上运行 PostgreSQL,并希望将数据库软件移到运行 RHEL 9 的主机,您可以迁移数据库。

在 RHEL 中,您可以为数据库文件使用两个 PostgreSQL 迁移路径:

  • 使用 pg_upgrade 工具快速升级
  • 转储和恢复升级

快速升级方法比转储和恢复过程要快。然而,在某些情况下,快速升级无法正常工作,例如,当跨架构升级时,只能使用转储和恢复过程。

作为迁移到更新版本的 PostgreSQL 的先决条件,备份所有 PostgreSQL 数据库。

转储和恢复过程需要转储数据库并执行SQL文件备份,建议使用快速升级方法。

4.10.1. 使用 pg_upgrade 工具快速升级

作为系统管理员,您可以使用快速升级方法升级到 PostgreSQL 的最新版本。要执行快速升级,将二进制数据文件复制到 /var/lib/pgsql/data/ 目录中,并使用 pg_upgrade 工具。

您可以使用此方法迁移数据:

  • 从 RHEL 8 的 PostgreSQL 12 版本到 RHEL 的 PostgreSQL 13
  • 从 RHEL 8 或 9 版本的 PostgreSQL 13 到 RHEL 的 PostgreSQL 15
  • 从 RHEL 8 或 9 版本的 PostgreSQL 15 到 RHEL 的 PostgreSQL 16

以下流程描述了使用快速升级方法从 RHEL 8 的 PostgreSQL 12 迁移到 RHEL 9 版本的 PostgreSQL 13。对于从 12 以外的 postgresql 流进行迁移,请使用以下方法之一:

  • 将 PostgreSQL 服务器更新至 RHEL 8 上的版本 12,然后使用 pg_upgrade 工具执行到 RHEL 9 版本的 PostgreSQL 13 的快速升级。
  • 使用转储并直接恢复任何 RHEL 8 版本 RHEL 8 版本和 RHEL 9 中的相同或之后的 PostgreSQL 版本之间的升级。

先决条件

  • 您创建了 PostgreSQL 数据库和配置文件的备份。

流程

  1. 在 RHEL 9 系统中,安装 postgresql-serverpostgresql-upgrade 软件包:

    # dnf install postgresql-server postgresql-upgrade

    另外,如果您在 RHEL 8 中使用了任何 PostgreSQL 服务器模块,请在 RHEL 9 系统上安装它们,在两个版本中根据 PostgreSQL 12 进行编译(作为 postgresql-upgrade 软件包安装)和 PostgreSQL 13 的目标版本(作为 postgresql-server 软件包安装)。如果您需要编译第三方 PostgreSQL 服务器模块,请根据 postgresql-devel 和 postgresql- upgrade-devel 软件包进行构建

  2. 检查以下项:

    • 基本配置:在 RHEL 9 系统中,检查您的服务器是否使用默认 /var/lib/pgsql/data 目录,且数据库已正确初始化并启用。此外,数据文件必须存储在 /usr/lib/systemd/system/postgresql.service 文件中提及的相同路径。
    • PostgreSQL 服务器:您的系统可以运行多个 PostgreSQL 服务器。确保所有这些服务器的数据目录都是独立处理的。
    • PostgreSQL 服务器模块:确定您在 RHEL 8 中使用的 PostgreSQL 服务器模块也安装在 RHEL 9 系统中。请注意,插件安装在 /usr/lib64/pgsql/ 目录中。
  3. 确保 postgresql 服务在复制数据时未在源和目标系统上运行。

    # systemctl stop postgresql.service
  4. 将源位置中的数据库文件复制到 RHEL 9 系统上的 /var/lib/pgsql/data/ 目录中。
  5. 以 PostgreSQL 用户身份运行以下命令来执行升级过程:

    # postgresql-setup --upgrade

    这会在后台启动 pg_upgrade 进程。

    在出现故障时,postgresql-setup 会提供一条说明性的错误消息。

  6. 将之前的配置从 /var/lib/pgsql/data-old 复制到新集群。

    请注意,快速升级不会在较新的数据栈中重用之前的配置,配置是从零开始生成的。如果要手动组合旧的和新配置,请使用数据目录中的 5.2. conf 文件。

  7. 启动新的 PostgreSQL 服务器:

    # systemctl start postgresql.service
  8. 分析新的数据库集群。

    • 对于 PostgreSQL 13:

      su postgres -c '~/analyze_new_cluster.sh'
    • 对于 PostgreSQL 15 或更高版本:

      su postgres -c 'vacuumdb --all --analyze-in-stages'
      注意

      您可能需要使用 ALTER COLLATION name REFRESH VERSION,请查看 上游文档 以了解详细信息。

  9. 如果您希望新 PostgreSQL 服务器在引导时自动启动,请运行:

    # systemctl enable postgresql.service
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

关于红帽文档

Legal Notice

Theme

© 2026 Red Hat
返回顶部