37. 软件升级¶
由于 PostGIS 位于 PostgreSQL 中,因此每个 PostGIS 安装实际上都包含两个版本的软件:PostgreSQL 版本和 PostGIS 版本。一般来说,每个版本的 PostGIS 理论上可以在多个版本的 PostgreSQL 中运行,反之亦然。
实际上,可用的确切版本对将由构建 PostgreSQL 发行版的打包程序决定。大多数 Linux 包为每个 PostgreSQL 版本发布包含几个 PostGIS 版本,允许根据您的偏好独立或同时升级这些部分。
升级可以从升级每个组件的角度来考虑。
37.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。大版本升级添加了新功能并更改了行为。
37.1.1. 小版本 PostgreSQL 升级¶
对于“小版本升级”,不需要任何特殊流程。只需安装新软件并重新启动服务器即可。
37.1.2. 大版本 PostgreSQL 升级¶
对于“大版本升级”,有两种方法可以进行升级。
37.1.2.1. 转储/恢复¶
转储和恢复涉及将所有数据转换为平台无关格式(文本表示)进行转储,并在恢复时转换回本机表示,因此可能非常耗时且占用大量 CPU 资源。但是,如果您要迁移到新的架构或操作系统,则这是必需的过程。它也是一个经过时间考验且广为人知的升级路径,因此,如果您的数据库不太大,就没有理由不坚持使用它。
从旧数据库中转储您的数据
pg_dumpall
。安装新版本的 PostgreSQL 和与旧数据库中使用的相同版本的 PostGIS。您需要匹配 PostGIS 版本,以便转储文件函数定义引用预期版本的 PostGIS 库。
使用新软件中的
initdb
程序初始化新的数据区域。在新数据区域上启动新服务器。
使用
pg_restore
恢复转储文件。
37.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
文件,请立即运行它们。启动新服务器。
37.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';