3.9. 在 RHEL 10 上将 PostgreSQL 实例从之前的 RHEL 版本迁移到 PostgreSQL 16


如果您已在 RHEL 9 上运行了低于 16 的 PostgreSQL 版本,并希望将数据库软件移到运行 RHEL 10 的主机上,您可以迁移数据库。

可用的迁移方法是:

重要

在 PostgreSQL 迁移前,始终备份源主机上的 /var/lib/pgsql/data/ 目录。

您可以使用备份和恢复方法将数据从 PostgreSQL 的任何 RHEL 8 或 RHEL 9 版本迁移到 RHEL 10 上 PostgreSQL 的任何相等或更新版本。

先决条件

  • 现有数据库服务器在 RHEL 8 或 RHEL 9 上运行,并使用从 RHEL 存储库安装的 PostgreSQL 版本。
  • 两个主机上的区域设置是相同的。要验证这一点,请比较两个主机上的 echo $LANG 命令的输出。

流程

  1. 在具有您要迁移的现有 PostgreSQL 实例的主机上:

    1. 将所有数据库导出到 /var/lib/pgsql/pgdump_file.sql 文件中:

      # su - postgres -c "pg_dumpall > /var/lib/pgsql/pgdump_file.sql"
      Copy to Clipboard Toggle word wrap
    2. 检查导出的文件:

      # su - postgres -c 'less "/var/lib/pgsql/pgdump_file.sql"'
      Copy to Clipboard Toggle word wrap
    3. 将您在之前步骤中创建的数据库转储和 PostgreSQL 配置文件复制到 RHEL 10 主机,例如:

      # scp /var/lib/pgsql/pgdump_file.sql \
             /var/lib/pgsql/data/pg_hba.conf \
             /var/lib/pgsql/data/pg_ident.conf \
             /var/lib/pgsql/data/postgresql.conf \
             <user>@<rhel_10_host>:/tmp/
      Copy to Clipboard Toggle word wrap
  2. 在 RHEL 10 主机上:

    1. 安装 postgresql-server 软件包:

      # dnf install postgresql-server
      Copy to Clipboard Toggle word wrap
    2. 初始化 /var/lib/pgsql/data/ 目录:

      # postgresql-setup --initdb
      Copy to Clipboard Toggle word wrap
    3. 将复制的配置文件移到 /var/lib/pgsql/data/ 目录中:

      # mv /tmp/pg_hba.conf \
           /tmp/pg_ident.conf \
           /tmp/postgresql.conf \
           /var/lib/pgsql/data/
      Copy to Clipboard Toggle word wrap
    4. 确保 /var/lib/pgsql/data/ directory 目录中内容的所有权正确:

      # chown -R postgres:postgres /var/lib/pgsql/data/
      Copy to Clipboard Toggle word wrap
    5. /var/lib/pgsql/data/ 恢复 SELinux 上下文:

      # restorecon -Rv /var/lib/pgsql/data/
      Copy to Clipboard Toggle word wrap
    6. 启用并启动 postgresql 服务:

      # systemctl enable --now postgresql.service
      Copy to Clipboard Toggle word wrap
    7. postgres 用户身份导入数据:

      # su - postgres -c 'psql -f /tmp/pgdump_file.sql postgres'
      Copy to Clipboard Toggle word wrap
    8. 验证您的数据库,并确保您的使用 PostgreSQL 服务器的应用程序可以正常工作。

如果要将 PostgreSQL 13 实例从以前的 RHEL 版本迁移到 RHEL 10 上的 PostgreSQL 16,您可以使用快速升级方法。使用此方法,您可以将 /var/lib/pgsql/data/ 目录的内容复制到 RHEL 10 主机,并使用 pg_update 工具转换数据库。

重要

此方法只有在现有的 PostgreSQL 实例版本是 13 ,且硬件架构在源和目标主机上相同时才可以正常工作。在其他情况下,请使用 备份和恢复方法

先决条件

  • 现有数据库服务器使用 PostgreSQL 13。
  • 当前和未来服务器的硬件架构是相同的。
  • RHEL 10 主机在存放 /var/lib/pgsql/ 目录的磁盘上有足够的可用空间。

    例如,如果要迁移的 PostgreSQL 服务器上的目录的大小为 10 GiB,则迁移过程中,RHEL 10 主机上至少需要 20 GiB 的可用磁盘空间。

  • 两个主机上的区域设置是相同的。要验证这一点,请比较两个主机上的 echo $LANG 命令的输出。

流程

  1. 在具有您要迁移的现有 PostgreSQL 实例的主机上:

    1. 停止 postgresql 服务:

      # systemctl stop postgresql.service
      Copy to Clipboard Toggle word wrap
    2. 进到 /var/lib/pgsql/ 目录,并备份 data 子目录:

      # cd /var/lib/pgsql/
      # tar -zcf ~/pgdata.bak.tar.gz data/
      Copy to Clipboard Toggle word wrap
    3. ~/pgdata.bak.tar.gz 存档复制到 RHEL 10 主机,例如:

      # scp ~/pgdata.bak.tar.gz <user>@<rhel_10_host>:/tmp/
      Copy to Clipboard Toggle word wrap
  2. 在 RHEL 10 主机上:

    1. 安装所需的软件包:

      # dnf install postgresql-server postgresql-upgrade
      Copy to Clipboard Toggle word wrap

      postgresql-upgrade 软件包提供在一个迁移过程中所需的 PostgreSQL 13 服务器。

    2. 如果您使用第三方 PostgreSQL 服务器模块,请针对 postgresql-develpostgresql-upgrade-devel 软件包构建它们,并安装它们。
    3. 确保 postgresql 服务已停止:

      # systemctl stop postgresql.service
      Copy to Clipboard Toggle word wrap
    4. 进入 /var/lib/pgsql/ 目录,并从之前主机中提取备份的数据目录:

      # cd /var/lib/pgsql/
      # tar -zxf /tmp/pgdata.bak.tar.gz
      Copy to Clipboard Toggle word wrap
    5. 可选:删除 /tmp/pgdata.bak.tar.gz 归档:

      # rm /tmp/pgdata.bak.tar.gz
      Copy to Clipboard Toggle word wrap
    6. 执行升级过程:

      # postgresql-setup --upgrade
      Copy to Clipboard Toggle word wrap

      postgresql-setup shell 脚本将 /var/lib/pgsql/data/ 目录重命名为 /var/lib/pgsql/data-old/,并使用 pg_upgrade 工具将数据库迁移到重新创建的 /var/lib/pgsql/data/ 目录中。

      重要

      pg_upgrade 工具只迁移数据库,而不迁移配置文件。迁移后,/var/lib/pgsql/data/ 仅包含默认的 .conf 文件。如果您之前有自定义配置文件,请从 /var/lib/pgsql/data-old/ 目录中复制它们,并确保它们与新的 PostgreSQL 版本兼容。

    7. 启用并启动 postgresql 服务:

      # systemctl enable --now postgresql.service
      Copy to Clipboard Toggle word wrap
    8. 清理和分析所有数据库:

      # su postgres -c 'vacuumdb --all --analyze-in-stages'
      Copy to Clipboard Toggle word wrap
    9. 验证您的数据库,并确保您的使用 PostgreSQL 服务器的应用程序可以正常工作。
    10. 可选:删除 /var/lib/pgsql/data-old/ 目录,该目录包含迁移之前的数据库和配置文件。

      # rm -r /var/lib/pgsql/data-old/
      Copy to Clipboard Toggle word wrap
    11. 可选:删除 postgresql-upgrade 软件包:

      # dnf remove postgresql-upgrade
      Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat