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 数据库和配置文件的备份。
流程
在 RHEL 9 系统中,安装
postgresql-server和postgresql-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 软件包进行构建。检查以下项:
-
基本配置:在 RHEL 9 系统中,检查您的服务器是否使用默认
/var/lib/pgsql/data目录,且数据库已正确初始化并启用。此外,数据文件必须存储在/usr/lib/systemd/system/postgresql.service文件中提及的相同路径。 - PostgreSQL 服务器:您的系统可以运行多个 PostgreSQL 服务器。确保所有这些服务器的数据目录都是独立处理的。
-
PostgreSQL 服务器模块:确定您在 RHEL 8 中使用的 PostgreSQL 服务器模块也安装在 RHEL 9 系统中。请注意,插件安装在
/usr/lib64/pgsql/目录中。
-
基本配置:在 RHEL 9 系统中,检查您的服务器是否使用默认
确保
postgresql服务在复制数据时未在源和目标系统上运行。# systemctl stop postgresql.service-
将源位置中的数据库文件复制到 RHEL 9 系统上的
/var/lib/pgsql/data/目录中。 以 PostgreSQL 用户身份运行以下命令来执行升级过程:
# postgresql-setup --upgrade这会在后台启动
pg_upgrade进程。在出现故障时,
postgresql-setup会提供一条说明性的错误消息。将之前的配置从
/var/lib/pgsql/data-old复制到新集群。请注意,快速升级不会在较新的数据栈中重用之前的配置,配置是从零开始生成的。如果要手动组合旧的和新配置,请使用数据目录中的 5.2.
conf文件。启动新的 PostgreSQL 服务器:
# systemctl start postgresql.service分析新的数据库集群。
对于 PostgreSQL 13:
su postgres -c '~/analyze_new_cluster.sh'对于 PostgreSQL 15 或更高版本:
su postgres -c 'vacuumdb --all --analyze-in-stages'注意您可能需要使用
ALTER COLLATION name REFRESH VERSION,请查看 上游文档 以了解详细信息。
如果您希望新 PostgreSQL 服务器在引导时自动启动,请运行:
# systemctl enable postgresql.service