18.6. 升级 PostgreSQL 集群

本节讨论如何将数据库数据从一个 PostgreSQL 版本升级到一个新版本。

当前的 PostgreSQL 版本号由主版本号和次版本号组成。例如,在版本号 10.1 中,10 是主要版本号,而 1 是次要版本号,这意味着这将是主要版本 10 的第一个次要版本。对于 PostgreSQL 10.0 之前的版本,版本号包括三个数字,例如 9.5.3. 在这些情况下,主要版本由版本号的前两位数字组(例如 9.5)组成,次要版本是第三个数字组(例如 3),这意味着这将是主要版本 9.5 的第三个次要版本。

次要版本永远不会更改内部存储格式,并且始终与相同主版本号的早期和较晚次要版本兼容。例如,版本 10.1 与版本 10.0 和版本 10.6 兼容。类似地,例如,9.5.3 与 9.5.0、9.5.1 和 9.5.6 兼容。要在兼容版本之间进行更新,只需在服务器关闭时替换可执行文件,然后重新启动服务器即可。数据目录保持不变-较小的升级就这么简单。

对于 PostgreSQL 的主要版本,内部数据存储格式可能会发生更改,从而使升级变得复杂。将数据移动到新的主要版本的传统方法是转储并重新加载数据库,尽管这可能很慢。更快的方法是pg_upgrade。复制方法也可用,如下所述。

新的主要版本通常还会引入一些用户可见的不兼容性,因此可能需要更改应用程序编程。所有用户可见的更改都在发行说明(Appendix E)中列出;请特别注意标有“迁移”的部分。如果要跨多个主要版本进行升级,请确保阅读每个中间版本的发行说明。

谨慎的用户会希望在完全切换之前在新版本上测试其 Client 端应用程序;因此,最好同时设置新旧版本的安装。在测试 PostgreSQL 重大升级时,请考虑以下类别的可能更改:

18 .6.1. 通过 pg_dumpall 升级数据

一种升级方法是从 PostgreSQL 的一个主要版本中转储数据,然后在另一个主要版本中重新加载-为此,必须使用 pg_dumpall 之类的逻辑备份工具;文件系统级备份方法将不起作用。 (已经进行了检查,阻止您将数据目录与 PostgreSQL 的不兼容版本一起使用,因此,尝试在数据目录上启动错误的服务器版本不会造成很大的伤害.)

建议您使用 PostgreSQL 较新版本的 pg_dump 和 pg_dumpall 程序,以利用这些程序中可能进行的增强。当前版本的转储程序可以从任何服务器版本回 7.0 读取数据。

这些说明假定您现有的安装位于/usr/local/pgsql目录下,并且数据区域位于/usr/local/pgsql/data中。适当替换您的路径。

要备份数据库安装,请键入:

pg_dumpall > outputfile

要进行备份,可以使用当前正在运行的版本中的 pg_dumpall 命令。有关更多详细信息,请参见Section 25.1.2。为了获得最佳结果,请尝试使用 PostgreSQL 11.8 中的 pg_dumpall 命令,因为该版本包含错误修复和对旧版本的改进。尽管由于尚未安装新版本,此建议似乎有些特殊,但如果您打算与旧版本并行安装新版本,建议您遵循该建议。在这种情况下,您可以正常完成安装并稍后传输数据。这也将减少停机时间。

pg_ctl stop

在启动时已启动 PostgreSQL 的系统上,可能会有一个启动文件来完成相同的任务。例如,在 Red Hat Linux 系统上,您可能会发现这可行:

/etc/rc.d/init.d/postgresql stop

有关启动和停止服务器的详细信息,请参见Chapter 18

mv /usr/local/pgsql /usr/local/pgsql.old

(请确保将目录作为一个整体移动,以便相对路径保持不变.)

/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
/usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data
/usr/local/pgsql/bin/psql -d postgres -f outputfile

使用* new * psql。

通过将新服务器安装在不同目录中并在不同端口上并行运行旧服务器和新服务器,可以实现最少的停机时间。然后,您可以使用类似:

pg_dumpall -p 5432 | psql -d postgres -p 5433

传输您的数据。

18 .6.2. 通过 pg_upgrade 升级数据

pg_upgrade模块允许将安装从一个主要 PostgreSQL 版本就地迁移到另一个主要 PostgreSQL 版本。升级可以在几分钟内完成,尤其是在--link模式下。它需要类似于上述 pg_dumpall 的步骤,例如启动/停止服务器,运行 initdb。 pg_upgrade documentation概述了必要的步骤。

18 .6.3. 通过复制升级数据

也可以使用逻辑复制方法使用更新版本的 PostgreSQL 创建备用服务器。这是可能的,因为逻辑复制支持在 PostgreSQL 的不同主要版本之间进行复制。备用计算机可以在同一台计算机上,也可以在另一台计算机上。一旦它与主服务器同步(运行旧版本的 PostgreSQL),您就可以切换主服务器并将备用服务器作为主服务器,并关闭旧数据库实例。这种切换只会导致升级停机几秒钟。

可以使用内置逻辑复制工具以及外部逻辑复制系统(例如 pgologic,Slony,Londiste 和 Bucardo)来执行这种升级方法。

上一章 首页 下一章