Menu Close

4.6. 迁移到 RHEL 9 的 PostgreSQL 版本

Red Hat Enterprise Linux 8 在多个模块流中提供 PostgreSQLPostgreSQL 10 (默认的 postgresql 流)、PostgreSQL 9.6PostgreSQL 12PostgreSQL 13。在 RHEL 9 中,PostgreSQL 13 可用。

Red Hat Enterprise Linux 上的 PostgreSQL 用户可为数据库文件使用两个迁移路径:

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

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

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

在迁移到 PostgreSQL 的后续版本之前,请参阅您要迁移的 PostgreSQL 版本的上游兼容性说明,以及您要迁移的版本与目标版本之间所有跳过的 PostgreSQL 版本。

4.6.1. 使用 pg_upgrade 工具快速升级

在快速升级过程中,必须将二进制数据文件复制到 /var/lib/pgsql/data/ 目录中,并使用 pg_upgrade 工具。

您可以使用此方法将数据从 RHEL 8 的 PostgreSQL 12 版本迁移到 RHEL 9 版本的 PostgreSQL 13

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

  • 将 RHEL 8 上的 PostgreSQL 服务器更新至版本 12,然后使用 pg_upgrade 程序执行一个到 RHEL 9 版本的 PostgreSQL 13 的快速升级。如需更多信息,请参阅 迁移到 PostgreSQL 的 RHEL 9 版本
  • 使用 dump 和 restore 直接在 RHEL 8 中的 PostgreSQL 版本和 RHEL 9 中的 PGPostgreSQL 13 之间进行升级。

先决条件

  • 在执行升级前,请备份存储在 PostgreSQL 数据库中的所有数据。默认情况下,所有数据都存储在 RHEL 8 和 RHEL 9 系统的 /var/lib/pgsql/data/ 目录中。

流程

  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-develpostgresql-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 复制到新集群。

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

  7. 启动新的 PostgreSQL 服务器:

    # systemctl start postgresql.service
  8. 运行 PostgreSQL 主目录中的 analyze_new_cluster.sh 脚本:

    su postgres -c '~/analyze_new_cluster.sh'
  9. 如果您希望新 PostgreSQL 服务器在引导时自动启动,请运行:

    # systemctl enable postgresql.service