39. 软件升级¶
由于 PostGIS 驻留在 PostgreSQL 中,因此每个 PostGIS 安装实际上都包含两个版本的软件:PostgreSQL 版本和 PostGIS 版本。 一般原则是,每个版本的 PostGIS 理论上都可以在多个版本的 PostgreSQL 中运行,反之亦然。
实际上,可用的确切版本对将由构建您的 PostgreSQL 发行版的打包程序决定。 大多数 Linux 包为每个 PostgreSQL 版本发布都包含几个 PostGIS 版本,允许根据您的喜好独立或同时升级这些部分。
可以考虑从升级每个组件的角度进行升级。
39.1. 升级 PostgreSQL¶
PostgreSQL 升级方案有两种:
当软件版本在“补丁”级别增加时,为“小版本升级”。 例如,从 8.4.3 到 8.4.4,或从 9.0.1 到 9.0.3。 增加多个补丁版本也没问题。 小版本升级修复错误,但不添加任何新功能或更改行为。
当“主要”或“次要”版本增加时,为“主要版本升级”。 例如,从 8.4.5 到 9.0.0,或从 9.0.5 到 9.1.1。 主要版本升级添加新功能并更改行为。
39.1.1. PostgreSQL 小版本升级¶
对于“小版本升级”,无需特殊流程。 只需安装新软件,然后重新启动服务器即可。
39.1.2. PostgreSQL 主要版本升级¶
对于“主要版本升级”,有两种升级方法。
39.1.2.1. 转储/恢复¶
转储和恢复涉及在转储时将所有数据转换为平台中立的格式(文本表示),并在恢复时转换回原生表示,因此它可能很耗时且占用大量 CPU。 但是,如果要迁移到新的体系结构或操作系统,则这是一个必需的过程。 它也是经过时间考验且广为人知的升级路径,因此如果您的数据库不是太大,则没有理由不坚持使用它。
从旧数据库转储您的数据
pg_dumpall
。安装新版本的 PostgreSQL 以及旧数据库中使用的相同版本的 PostGIS。您需要匹配 PostGIS 版本,以便转储文件函数定义引用 PostGIS 库的预期版本。
使用新软件中的
initdb
程序初始化新的数据区域。在新数据区域启动新服务器。
使用
pg_restore
恢复转储文件。
39.1.2.2. pg_upgrade¶
pg_upgrade 实用程序允许升级 PostgreSQL 数据目录,而无需转储/恢复步骤。该实用程序无法处理对数据文件本身的更改,但可以处理 PostgreSQL 主要升级中系统表发生的更常见和频繁的更改。
注意
有关运行升级过程的完整说明,请参阅 PostgreSQL 网站上的 pg_upgrade 网页。
pg_upgrade 程序需要访问它正在使用的两个版本的 PostgreSQL,旧版本和新版本,因此您必须同时安装它们。
安装您将使用的新版本的 PostgreSQL。
将旧 PostgreSQL 中使用的相同版本的 PostGIS 安装到新的 PostgreSQL 中。
使用新副本的
initdb
初始化新的 PostgreSQL 数据区域。确保关闭旧的和新的 PostgreSQL 服务器。
运行 pg_upgrade,确保使用新软件安装中的二进制文件。
pg_upgrade --old-datadir "/var/lib/postgres/12/data" --new-datadir "/var/lib/postgres/13/data" --old-bindir "/usr/pgsql/12/bin" --new-bindir "/usr/pgsql/13/bin"
如果 pg_upgrade 生成了任何
.sql
文件,请立即运行它们。启动新服务器。
39.2. 升级 PostGIS¶
PostGIS 通过 EXTENSION
机制处理小版本升级和主要版本升级。 如果您使用 CREATE EXTENSION postgis
启用了数据库的空间功能,则可以使用相同的功能更新数据库。
首先,安装新软件,使其可用于数据库。
然后,运行 SQL 以升级 PostGIS 扩展。
-- If you are upgrading from PostGIS 2.5 or later
-- and want the latest installed version
SELECT postgis_extensions_upgrade();
-- If you are upgrading from an earlier version
-- you have to specifically turn on the version you want
ALTER EXTENSION postgis UPDATE TO '2.5.5';