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';