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资源。但若需迁移至新硬件架构或操作系统,此流程必不可少。作为经过时间验证的可靠升级方案,只要数据库规模适中,该方式始终是稳妥选择。
39.1.2.2. pg_upgrade¶
pg_upgrade 工具允许直接升级PostgreSQL数据目录,无需进行数据转储/恢复操作。该工具虽无法处理数据文件本身的变更,但能应对PostgreSQL主版本升级中常见的系统表结构变化。
注解
PostgreSQL 官网的 pg_upgrade 页面提供了完整的升级操作指南。
pg_upgrade 程序要求同时访问新旧两个PostgreSQL版本,因此需预先安装这两个版本。
安装待使用的 PostgreSQL 新版本。
在新版 PostgreSQL 中安装与旧版本完全相同的 PostGIS 版本。
使用新版``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``命令为数据库启用空间功能,可通过相同机制进行更新。
首先安装新版 PostgreSQL 软件,确保数据库可调用新版本组件。
随后执行以下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';