升级适用于 Amazon RDS 的 PostgreSQL 数据库引擎 - Amazon Relational Database Service

升级适用于 Amazon RDS 的 PostgreSQL 数据库引擎

您可以为 PostgreSQL 数据库管理两种类型的升级:

  • 操作系统更新 – 有时,为了应用安全修复或操作系统更改,Amazon RDS 可能需要更新数据库的基础操作系统。您可通过使用 AWS Command Line Interface(AWS CLI)或 RDS API 来决定 Amazon RDS 何时应用操作系统更新。有关操作系统更新的更多信息,请参阅 应用数据库实例的更新

  • 数据库引擎升级 – 如果 Amazon RDS 支持数据库引擎的新版本,您可以将您的数据库升级到新版本。

此上下文中的数据库是 RDS for PostgreSQL 数据库实例或多可用区数据库集群。

PostgreSQL 数据库有两种升级方式:主要版本升级和次要版本升级。

主要版本升级。

主要版本升级会包含不与现有应用程序向后兼容的数据库更改。因此,您必须手动执行数据库的主要版本升级。您可以通过修改数据库实例或多可用区数据库集群来启动主要版本升级。但是,执行主要版本升级之前,我们建议您按照 为 PostgreSQL 选择主要版本升级中所述的步骤操作。

如果您正在升级具有区域内只读副本的数据库实例,Amazon RDS 会升级副本以及主数据库实例。

Amazon RDS 不会升级多可用区数据库集群只读副本。如果您对多可用区数据库集群执行主要版本升级,则其只读副本的复制状态会更改为终止。升级完成后,您必须手动删除并重新创建只读副本。

次要版本升级

相比之下,次要版本升级仅包括与现有应用程序向后兼容的更改。您可以通过修改数据库来手动启动次要版本升级。或者,您可以在创建或修改数据库时启用自动次要版本升级选项。这样做意味着数据库在 Amazon RDS 测试并批准新版本后会自动升级。如果 PostgreSQL 数据库正在使用只读副本,则必须在升级源实例或集群之前首先升级所有只读副本。

如果您的数据库是多可用区数据库实例部署,则会同时升级主实例和任何备用实例。如果您的数据库是多可用区数据库集群部署,则同时升级写入器和读取器实例。因此,在升级完成之前,数据库可能不可用。有关更多信息,请参阅 PostgreSQL 的自动次要版本升级。有关手动执行次要版本升级的信息,请参阅 手动升级引擎版本

有关数据库引擎版本和弃用数据库引擎版本策略的更多信息,请参阅 Amazon RDS 常见问题中的数据库引擎版本

升级 PostgreSQL 概述

为了安全地升级数据库,Amazon RDS 使用 PostgreSQL 文档中所述的 pg_upgrade 实用程序。

使用 AWS Management Console 升级数据库时,它会显示数据库的有效升级目标。您还可以使用以下 AWS CLI 命令来标识数据库的有效升级目标:

对于 Linux、macOS 或 Unix:

aws rds describe-db-engine-versions \ --engine postgres \ --engine-version version-number \ --query "DBEngineVersions[*].ValidUpgradeTarget[*].{EngineVersion:EngineVersion}" --output text

对于 Windows:

aws rds describe-db-engine-versions ^ --engine postgres ^ --engine-version version-number ^ --query "DBEngineVersions[*].ValidUpgradeTarget[*].{EngineVersion:EngineVersion}" --output text

例如,要标识 PostgreSQL 版本 12.13 数据库的有效升级目标,请运行以下 AWS CLI 命令:

对于 Linux、macOS 或 Unix:

aws rds describe-db-engine-versions \ --engine postgres \ --engine-version 12.13 \ --query "DBEngineVersions[*].ValidUpgradeTarget[*].{EngineVersion:EngineVersion}" --output text

对于 Windows:

aws rds describe-db-engine-versions ^ --engine postgres ^ --engine-version 12.13 ^ --query "DBEngineVersions[*].ValidUpgradeTarget[*].{EngineVersion:EngineVersion}" --output text

如果您的备份保留期大于 0,Amazon RDS 会在升级期间获取两份数据库快照。第一个数据库快照是数据库在进行任何升级更改前的快照。如果数据库升级失败,您可以还原此快照,以创建一个运行旧版本的数据库。第二个数据库快照是在升级完成后制作的。

注意

仅当您将数据库的备份保留期设置为大于 0 的数字时,Amazon RDS 才会在升级过程中制作数据库快照。要更改数据库实例的备份保留期,请参阅修改 Amazon RDS 数据库实例。您无法为多可用区数据库集群配置自定义备份保留期。

执行数据库实例的主要版本升级时,任何区域内只读副本也会自动升级。升级工作流程开始后,只读副本实例会等待主数据库实例上的 pg_upgrade 成功完成。然后,主数据库实例升级会等待只读副本实例升级完成。在升级完成之前,您会遇到中断。当您对多可用区数据库集群执行主要版本升级时,只读副本的复制状态会更改为终止

如果数据库在多可用区数据库实例部署中,则同时升级主数据库实例和备用副本。如果您的数据库是多可用区数据库集群部署,则首先升级写入器数据库实例,然后同时升级读取器数据库实例。

升级完成后,您无法还原到以前版本的数据库引擎。如果要返回之前的版本,则需要还原在升级之前创建的数据库快照,以创建新的数据库。

PostgreSQL 版本号

PostgreSQL 数据库引擎的版本编号序列如下所示:

  • 对于 PostgreSQL 版本 10 及更高版本,引擎版本号格式为主要版本.次要版本。主要版本号是版本号的整数部分。次要版本号是版本号的小数部分。

    主要版本升级会增加版本号的整数部分,例如从 10.次要版本 升级为 11.次要版本

  • 对于版本低于 10 的 PostgreSQL 版本,引擎版本号的格式为主要版本.主要版本.次要版本。主引擎版本号是版本号的整数和第一个小数点后的部分。例如,9.6 是一个主要版本。次要版本号是版本号的第三部分。例如,版本 9.6.12 中 12 是次要版本号。

    主要版本升级会增加版本号的主要版本部分。例如,从 9.6.12 升级到 11.14 是主要版本升级,其中 9.611 为主要版本号。

RDS 版本号

RDS 版本号使用 major.minor.patch 命名方案。RDS 补丁版本包括在发布后添加到次要版本的重要错误修复。要识别数据库的 Amazon RDS 版本号,必须先使用以下命令创建 rds_tools 扩展:

CREATE EXTENSION rds_tools;

从 PostgreSQL 版本 15.2-R2 的发行版开始,您可以使用以下 SQL 查询找出 RDS for PostgreSQL 数据库的 RDS 版本号:

postgres=> SELECT rds_tools.rds_version();

例如,查询 RDS for PostgreSQL 15.2 数据库将返回以下内容:

rds_version ---------------- 15.2.R2 (1 row)

为 PostgreSQL 选择主要版本升级

主要版本升级可包含不与数据库的以前版本向后兼容的更改。新功能会导致现有应用程序无法正常工作。出于此原因,Amazon RDS 不会自动应用主要版本升级。要执行主要版本升级,请手动修改数据库。在将升级应用到生产数据库之前,确保彻底地测试任何升级,验证您的应用程序是否正常工作。执行 PostgreSQL 主要版本升级时,我们建议您按照 如何执行主要版本升级 中所述的步骤操作。

将 PostgreSQL 单可用区数据库实例或多可用区数据库实例部署升级到其下一个主要版本时,与数据库关联的任何只读副本也会升级到该下一个主要版本。在某些情况下,您可以在升级时跳至更高的主要版本。如果跳过升级主要版本,则只读副本也会升级到该目标主要版本。跳过其他主要版本升级到版本 11 有一定的限制。您可以在 如何执行主要版本升级 中所述的步骤中找到详细信息。

PostgreSQL 引擎升级期间大多数 PostgreSQL 扩展都不会升级。这些扩展必须单独升级。有关更多信息,请参阅升级 PostgreSQL 扩展

通过运行以下 AWS CLI 查询,您可以找出哪些主要版本适用于您的 RDS for PostgreSQL 数据库:

aws rds describe-db-engine-versions --engine postgres --engine-version your-version --query "DBEngineVersions[*].ValidUpgradeTarget[*].{EngineVersion:EngineVersion}" --output text

下表总结了此查询结果的所有可用版本。版本号上的星号 (*) 表示该版本已弃用。如果您的当前版本已弃用,我们建议您升级到最新的次要版本升级目标或该版本的其他可用升级目标之一。有关 RDS for PostgreSQL 版本 9.6 弃用的更多信息,请参阅弃用 PostgreSQL 版本 9.6。有关 RDS for PostgreSQL 版本 10 弃用的更多信息,请参阅弃用 PostgreSQL 版本 10

当前源版本(*表示已弃用) 最新次要版本升级目标 最新主要版本升级目标 其他可用的升级目标
15.3 15.4
15.2 15.4 15.3
14.9 15.4
14.8 15.4 15.3 14.9
14.7 15.4 15.3 15.2 14.9 14.8
14.6 15.4 15.3 15.2 14.9 14.8 14.7
14.5 15.4 15.3 15.2 14.9 14.8 14.7 14.6
14.4 15.4 15.3 15.2 14.9 14.8 14.7 14.6 14.5
14.3 15.4 15.3 15.2 14.9 14.8 14.7 14.6 14.5 14.4
14.2* 15.4 15.3 15.2 14.9 14.8 14.7 14.6 14.5 14.4 14.3
14.1* 15.4 15.3 15.2 14.9 14.8 14.7 14.6 14.5 14.4 14.3 14.2
13.12 15.4 14.9
13.11 15.3 14.9 14.8
13.10 15.2 14.9 14.8 14.7 13.11
13.9 14.9 14.8 14.7 14.6 13.11 13.10
13.8 14.9 14.8 14.7 14.6 14.5 13.11 13.10 13.9
13.7 14.9 14.8 14.7 14.6 14.5 14.4 14.3 13.11 13.10 13.9 13.8
13.6* 14.9 14.8 14.7 14.6 14.5 14.4 14.3 14.2 13.11 13.10 13.9 13.8 13.7
13.5* 14.9 14.8 14.7 14.6 14.5 14.4 14.3 14.2 14.1 13.11 13.10 13.9 13.8 13.7 13.6
13.4* 14.9 14.8 14.7 14.6 14.5 14.4 14.3 14.2 14.1 13.11 13.10 13.9 13.8 13.7 13.6 13.5
13.3* 14.9 14.8 14.7 14.6 14.5 14.4 14.3 14.2 14.1 13.11 13.10 13.9 13.8 13.7 13.6 13.5 13.4
13.2*、13.1* 13.10 14.9 14.8 14.7 14.6 14.5 14.4 14.3 14.2 14.1 13.11 13.10 13.9 13.8 13.7 13.6 13.5 13.4
12.16 15.4 14.9 13.12
12.15 15.3 14.8 13.12 13.11 12.16
12.14 15.2 14.7 13.12 13.11 13.10 12.16 12.15
12.13 14.6 13.12 13.11 13.10 13.9 12.16 12.15 12.14
12.12 14.5 13.12 13.11 13.10 13.9 13.8 12.16 12.15 12.14 12.13
12.11 14.4 14.3 13.12 13.11 13.10 13.9 13.8 13.7 12.16 12.15 12.14 12.13 12.12
12.10* 14.2 13.12 13.11 13.10 13.9 13.8 13.7 13.6 12.16 12.15 12.14 12.13 12.12 12.11
12.9* 14.1 13.12 13.11 13.10 13.9 13.8 13.7 13.6 12.16 13.5 12.15 12.14 12.13 12.12 12.11 12.10
12.8* 13.12 13.11 13.10 13.9 13.8 13.7 13.6 13.5 13.4 12.16 12.15 12.14 12.13 12.12 12.11 12.10 12.9
12.7* 13.12 13.11 13.10 13.9 13.8 13.7 13.6 13.5 13.4 13.3 12.16 12.15 12.14 12.13 12.12 12.11 12.10 12.9 12.8
12.6*、12.5*、12.4*、12.3*、12.2* 13.12 13.11 13.7 13.6 12.16 12.15 12.14 12.13 12.12 12.11 12.10 12.9 12.8 12.7
11.21 15.4 14.9 13.12 12.16
11.20 15.3 14.8 13.11 12.15
11.19 15.2 14.7 13.10 12.15 12.14 11.20
11.18 14.6 13.9 12.15 12.14 12.13 11.20 11.19
11.17 14.5 13.8 12.15 12.14 12.13 12.12 11.20 11.19 11.18
11.16 14.4 14.3 13.7 12.15 12.14 12.13 12.12 12.11 11.20 11.19 11.18 11.17
11.15 14.2 13.6 12.15 12.14 12.13 12.12 12.11 12.10 11.20 11.19 11.18 11.17 11.16
11.14 14.1 13.5 12.15 12.14 12.13 12.12 12.11 12.10 12.9 11.20 11.19 11.18 11.17 11.16 11.15
11.13 13.4 12.15 12.14 12.13 12.12 12.11 12.10 12.9 12.8 11.20 11.19 11.18 11.17 11.16 11.15 11.14
11.12 13.3 12.15 12.14 12.13 12.12 12.11 12.10 12.9 12.8 12.7 11.20 11.19 11.18 11.17 11.16 11.15 11.14 11.13
10.23* 14.6 13.9 12.13 11.20 11.19 11.18
10.22* 14.5 13.8 12.12 11.20 11.19 11.18 11.17 10.23
10.21* 14.4 14.3 13.7 12.11 11.20 11.19 11.18 11.17 11.16 10.23 10.22
10.20* 14.2 13.6 12.10 11.20 11.19 11.18 11.17 11.16 11.15 10.23 10.22 10.21
10.19* 14.1 13.5 12.9 11.20 11.19 11.18 11.17 11.16 11.15 11.14 10.23 10.22 10.21 10.20
10.18* 13.4 12.8 11.20 11.19 11.18 11.17 11.16 11.15 11.14 11.13 10.23 10.22 10.21 10.20 10.19
10.17* 13.3 12.7 11.20 11.19 11.18 11.17 11.16 11.15 11.14 11.13 11.12 10.23 10.22 10.21 10.20 10.19 10.18
9.6.24* 14.1 13.5 12.9 11.14 10.20 10.19
9.6.23* 13.4 12.8 11.13 10.20 10.19 10.18 9.6.24
9.6.22* 13.3 12.7 11.12 10.20 10.19 10.18 10.17 9.6.24 9.6.23
9.6.19*、9.6.18*、9.6.17*、9.6.16*、9.6.15*、9.6.14*、9.6.12*、9.6.11*、9.6.10*、9.6.9*、9.6.8*、9.6.6*、9.6.5*、9.6.3*、9.6.2*、9.6.1* 9.6.24 14.1 13.5 12.9 11.14 10.20 10.19 9.6.23 9.6.22

如何执行主要版本升级

在 Amazon RDS for PostgreSQL 数据库上执行主要版本升级时,我们建议采用以下过程:

  1. 准备一个版本兼容的参数组 – 如果您使用的是自定义参数组,则您有两个选择。您可为新数据库引擎版本指定默认参数组。或者您可为新数据库引擎版本创建您自己的自定义参数组。有关更多信息,请参阅 使用参数组使用多可用区数据库集群的数据库集群参数组

  2. 检查不受支持的数据库类 – 检查数据库的实例类是否与您要升级到的 PostgreSQL 版本兼容。有关更多信息,请参阅数据库实例类支持的数据库引擎

  3. 检查是否有不支持的使用方式:

    • 准备的事务 – 在尝试升级前,提交或回滚所有打开的已准备事务。

      您可以使用以下查询来验证您的数据库上是否没有未结的已准备事务。

      SELECT count(*) FROM pg_catalog.pg_prepared_xacts;
    • Reg* 数据类型 – 在尝试升级前取消使用所有 reg* 数据类型。除了 regtyperegclass 以外,您不能升级 reg* 数据类型。pg_upgrade 实用程序无法保留此数据类型,Amazon RDS 使用它来执行升级。

      要验证是否没有使用不支持的 reg* 数据类型,请对每个数据库使用以下查询。

      SELECT count(*) FROM pg_catalog.pg_class c, pg_catalog.pg_namespace n, pg_catalog.pg_attribute a WHERE c.oid = a.attrelid AND NOT a.attisdropped AND a.atttypid IN ('pg_catalog.regproc'::pg_catalog.regtype, 'pg_catalog.regprocedure'::pg_catalog.regtype, 'pg_catalog.regoper'::pg_catalog.regtype, 'pg_catalog.regoperator'::pg_catalog.regtype, 'pg_catalog.regconfig'::pg_catalog.regtype, 'pg_catalog.regdictionary'::pg_catalog.regtype) AND c.relnamespace = n.oid AND n.nspname NOT IN ('pg_catalog', 'information_schema');
  4. 处理逻辑复制槽:如果数据库有逻辑复制槽,则无法进行升级。逻辑复制插槽通常用于 AWS DMS 迁移,以及将表从数据库复制到数据湖、BI 工具和其他目标。升级之前,请确保您知道正在使用的任何逻辑复制槽的用途,并确认可以将其删除。如果逻辑复制槽仍在使用中,则不应将其删除,但也无法继续升级。

    如果不需要逻辑复制槽,则可以使用以下 SQL 将其删除:

    SELECT * FROM pg_replication_slots; SELECT pg_drop_replication_slot(slot_name);

    使用 pglogical 扩展的逻辑复制设置还需要删除插槽才能成功升级主要版本。有关如何识别和删除使用 pglogical 扩展创建的插槽的信息,请参阅 管理 RDS for PostgreSQL 的逻辑复制查槽

  5. 处理只读副本 – 单可用区数据库实例或多可用区数据库实例部署的升级也会将区域内只读副本与主数据库实例一起升级。Amazon RDS 不会升级多可用区数据库集群只读副本。

    您无法单独升级只读副本。如果您可以单独升级,则可能会导致主数据库和副本数据库具有不同 PostgreSQL 主要版本的情况。但是,只读副本升级可能会增加主数据库实例上的停机时间。为防止只读副本升级,请在开始升级过程之前将副本提升为独立实例或将其删除。

    升级过程将根据只读副本的当前参数组重新创建副本的参数组。只有在升级完成后,才能通过修改只读副本将自定义参数组应用于只读副本。有关只读副本的更多信息,请参阅 使用 Amazon RDS for PostgreSQL 只读副本

  6. 执行备份 – 我们建议您在执行主要版本升级前执行备份,以便为您的数据库获得一个已知的还原点。如果您的备份保留期大于 0,则在升级之前和之后,升级过程会创建数据库的数据库快照。要更改您的备份保留期,请参阅修改 Amazon RDS 数据库实例修改多可用区数据库集群

    要手动执行备份,请参阅创建数据库快照创建多可用区数据库集群的快照

  7. 在主要版本升级之前更新某些扩展 – 如果打算在升级时跳过主要版本,您需要在执行主要版本升级之前更新某些扩展。例如,从版本 9.5.x 或 9.6.x 升级到版本 11.x 将跳过主要版本。要更新的扩展包括 PostGIS 和用于处理空间数据的相关扩展。

    • address_standardizer

    • address_standardizer_data_us

    • postgis_raster

    • postgis_tiger_geocoder

    • postgis_topology

    为您要使用的每个扩展运行以下命令:

    ALTER EXTENSION PostgreSQL-extension UPDATE TO 'new-version';

    有关更多信息,请参阅升级 PostgreSQL 扩展。要了解有关升级 PostGIS 的更多信息,请参阅步骤 6:升级 PostGIS 扩展

  8. 在主要版本升级之前删除某些扩展 – 跳过主要版本以升级到版本 11.x 的升级不支持更新 pgRouting 扩展。从版本 9.4.x、9.5.x 或 9.6.x 升级到版本 11.x 时,将会跳过主要版本。可以安全地删除 pgRouting 扩展,然后在升级后将其重新安装到兼容的版本中。有关您可以更新到的扩展版本,请参阅支持的 PostgreSQL 扩展版本

    PostgreSQL 版本 11 或更高版本不再支持 tsearch2chkpass 扩展。如果要升级到版本 11.x,请在升级之前删除 tsearch2chkpass 扩展。

  9. 删除未知数据类型 – 根据目标版本删除 unknown 数据类型。

    PostgreSQL 版本 10 停止支持 unknown 数据类型。如果版本 9.6 数据库使用 unknown 数据类型,升级到版本 10 将显示错误消息,如下所示:

    Database instance is in a state that cannot be upgraded: PreUpgrade checks failed: The instance could not be upgraded because the 'unknown' data type is used in user tables. Please remove all usages of the 'unknown' data type and try again."

    要在数据库中查找 unknown 数据类型以便删除有问题的列或将其更改为支持的数据类型,请使用以下 SQL:

    SELECT DISTINCT data_type FROM information_schema.columns WHERE data_type ILIKE 'unknown';
  10. 执行升级试运行 – 我们强烈建议您在生产数据库的副本上测试主要版本升级,然后再尝试在生产数据库上进行升级。您可以监控重复测试数据库上的执行计划,以了解任何可能的执行计划回归,并评估其性能。要创建副本测试实例,您可以从最近的快照还原数据库,也可以通过时间点还原将数据库还原到最近的可还原时间。

    有关更多信息,请参阅 从快照还原将数据库实例还原到指定时间。对于多可用区数据库集群,请参阅从快照还原到多可用区数据库集群将多可用区数据库集群还原到指定时间

    有关执行升级的详细信息,请参阅 手动升级引擎版本

    请注意,在将版本 9.6 数据库升级到版本 10 时,PostgreSQL 10 在默认情况下启用并行查询。您可以将测试数据库上的 max_parallel_workers_per_gather 参数更改为 2,从而在升级之前测试并行度的影响。

    注意

    default.postgresql10 数据库参数组中,max_parallel_workers_per_gather 参数的默认值为 2。

    有关更多信息,请参阅 PostgreSQL 文档中的并行查询。要在版本 10 上禁用并行,请将 max_parallel_workers_per_gather 参数设置为 0。

    在主要版本升级期间,将暂时重命名 publictemplate1 数据库以及每个数据库中的 public 架构。这些对象显示在日志中,同时附加了它们的原始名称和随机字符串。附加该字符串的目的是,在主要版本升级期间保留自定义设置,例如,localeowner。升级完成后,对象再次重命名为它们的原始名称。

    注意

    在主要版本升级过程中,您无法为数据库实例或多可用区数据库集群执行时间点还原。Amazon RDS 执行升级之后,它会自动备份数据库。您可以通过执行时间点还原,还原到数据库自动备份完成之后、升级操作开始之前的时间。

  11. 如果升级失败并出现预检查过程错误,请解决这些问题 – 在主要版本升级过程中,Amazon RDS for PostgreSQL 先运行预检查过程,以确定可能导致升级失败的任何问题。预检查过程检查实例上的所有数据库中的所有潜在的不兼容情况。

    如果预检查遇到问题,它将创建一个日志事件以指示升级预检查失败。对于所有数据库,预检查过程详细信息位于相应数据库的升级日志(名称为 pg_upgrade_precheck.log)中。Amazon RDS 在文件名中附加时间戳。有关查看日志的详细信息,请参阅 监控 Amazon RDS 日志文件

    如果只读副本升级在预检查时失败,则失败的只读副本上的复制将中断,并将该副本置于终止状态。删除该只读副本,并根据升级后的主数据库实例重新创建只读副本。

    解决预检查日志中确定的所有问题,然后重试主要版本升级。以下是一个预检查日志示例。

    ------------------------------------------------------------------------ Upgrade could not be run on Wed Apr 4 18:30:52 2018 ------------------------------------------------------------------------- The instance could not be upgraded from 9.6.11 to 10.6 for the following reasons. Please take appropriate action on databases that have usage incompatible with the requested major engine version upgrade and try the upgrade again. * There are uncommitted prepared transactions. Please commit or rollback all prepared transactions.* One or more role names start with 'pg_'. Rename all role names that start with 'pg_'. * The following issues in the database 'my"million$"db' need to be corrected before upgrading:** The ["line","reg*"] data types are used in user tables. Remove all usage of these data types. ** The database name contains characters that are not supported by RDS for PostgreSQL. Rename the database. ** The database has extensions installed that are not supported on the target database version. Drop the following extensions from your database: ["tsearch2"]. * The following issues in the database 'mydb' need to be corrected before upgrading:** The database has views or materialized views that depend on 'pg_stat_activity'. Drop the views.
  12. 如果在升级数据库时只读副本升级失败,解决问题 – 将失败的只读副本置于 incompatible-restore 状态并终止数据库上的复制。删除该只读副本,并根据升级后的主数据库实例重新创建只读副本。

    注意

    Amazon RDS 不会升级多可用区数据库集群的只读副本。如果您对多可用区数据库集群执行主要版本升级,则其只读副本的复制状态会更改为终止

    只读副本升级可能会因以下原因而失败:

    • 即使等待了一段时间,也无法跟上主数据库实例。

    • 处于终端或不兼容的生命周期状态,如 storage-full、incompatible-restore 等。

    • 主数据库实例升级开始后,在只读副本上运行了单独的次要版本升级。

    • 只读副本实例使用了不兼容的参数。

    • 只读副本实例无法与主实例通信以同步数据文件夹。

  13. 升级生产数据库 – 在成功完成试运行主要版本升级后,您就可以放心地升级生产数据库了。有关更多信息,请参阅手动升级引擎版本

  14. 运行 ANALYZE 操作以刷新 pg_statistic 表。您应该为所有 PostgreSQL 数据库上的每个数据库执行此操作。在主要版本升级期间不会传输优化程序统计数据,因此您需要重新生成所有统计数据,避免出现性能问题。运行不带任何参数的命令,为当前数据库中的所有常规表生成统计数据,如下所示:

    ANALYZE VERBOSE;

    VERBOSE 标记为可选项,可用于显示进度。有关更多信息,请参阅 PostgreSQL 文档中的 ANALYZE

    注意

    升级后在系统上运行 ANALYZE,避免出现性能问题。

在完成主要版本升级后,我们建议执行以下操作:

  • PostgreSQL 升级不会升级任何 PostgreSQL 扩展。要升级扩展,请参阅升级 PostgreSQL 扩展

  • (可选)使用 Amazon RDS 查看 pg_upgrade 实用程序生成的两个日志。它们是 pg_upgrade_internal.logpg_upgrade_server.log。Amazon RDS 会在这些日志的文件名中附加时间戳。您可以像查看其他任何日志一样查看这些日志。有关更多信息,请参阅“监控 Amazon RDS 日志文件”。

    您也可以将升级日志上传到 Amazon CloudWatch Logs 中。有关更多信息,请参阅“将 PostgreSQL 日志发布到 Amazon CloudWatch Logs”。

  • 要验证是否一切正常,请在升级的数据库上使用类似的工作负载测试应用程序。验证升级之后,您可以删除此测试实例。

PostgreSQL 的自动次要版本升级

如果在创建或修改数据库实例或多可用区数据库集群时启用自动次要版本升级选项,您可以自动升级数据库。

对于每个 RDS for PostgreSQL 主要版本,RDS 将一个次要版本指定为自动升级版本。在 Amazon RDS 测试并批准次要版本后,将在维护时段内自动进行次要版本升级。RDS 不会自动将发布的较新次要版本设置为自动升级版本。在 RDS 指定较新的自动升级版本之前,将会考虑一些条件,例如:

  • 已知的安全问题

  • PostgreSQL 社区版本中的错误

  • 发布次要版本后的整体队列稳定性

您可以使用以下 AWS CLI 命令确定特定 AWS 区域中指定 PostgreSQL 次要版本的当前自动次要升级目标版本。

对于 Linux、macOS 或 Unix:

aws rds describe-db-engine-versions \ --engine postgres \ --engine-version minor-version \ --region region \ --query "DBEngineVersions[*].ValidUpgradeTarget[*].{AutoUpgrade:AutoUpgrade,EngineVersion:EngineVersion}" \ --output text

对于 Windows:

aws rds describe-db-engine-versions ^ --engine postgres ^ --engine-version minor-version ^ --region region ^ --query "DBEngineVersions[*].ValidUpgradeTarget[*].{AutoUpgrade:AutoUpgrade,EngineVersion:EngineVersion}" ^ --output text

例如,以下 AWS CLI 命令可确定美国东部(俄亥俄州)AWS 区域(us-east-2)中 PostgreSQL 次要版本 12.13 的自动次要升级目标。

对于 Linux、macOS 或 Unix:

aws rds describe-db-engine-versions \ --engine postgres \ --engine-version 12.13 \ --region us-east-2 \ --query "DBEngineVersions[*].ValidUpgradeTarget[*].{AutoUpgrade:AutoUpgrade,EngineVersion:EngineVersion}" \ --output table

对于 Windows:

aws rds describe-db-engine-versions ^ --engine postgres ^ --engine-version 12.13 ^ --region us-east-2 ^ --query "DBEngineVersions[*].ValidUpgradeTarget[*].{AutoUpgrade:AutoUpgrade,EngineVersion:EngineVersion}" ^ --output table

输出类似于以下内容。

---------------------------------- | DescribeDBEngineVersions | +--------------+-----------------+ | AutoUpgrade | EngineVersion | +--------------+-----------------+ | True | 12.14 | | False | 12.15 | | False | 13.9 | | False | 13.10 | | False | 13.11 | | False | 14.6 | +--------------+-----------------+

在此示例中,AutoUpgrade 值对于 PostgreSQL 版本 12.14 为 True。因此,自动次要升级目标是 PostgreSQL 版本 12.14,它在输出中突出显示。

如果满足以下条件,则会在维护时段内自动升级 PostgreSQL 数据库:

  • 数据库启用了自动次要版本升级选项。

  • 数据库运行的次要数据库引擎版本低于当前的自动升级次要版本。

有关更多信息,请参阅自动升级次要引擎版本

注意

PostgreSQL 升级不会升级 PostgreSQL 扩展。要升级扩展,请参阅升级 PostgreSQL 扩展

升级 PostgreSQL 扩展

PostgreSQL 引擎升级不会升级大多数的 PostgreSQL 扩展。要在版本升级后更新扩展,请使用 ALTER EXTENSION UPDATE 命令。

注意

有关更新 PostGIS 扩展的信息,请参阅使用 PostGIS 扩展管理空间数据步骤 6:升级 PostGIS 扩展)。

要升级 pg_repack 扩展,先删除该扩展,然后在升级后的数据库中创建新版本。有关更多信息,请参阅 pg_repack 文档中的安装 pg_repack

要升级扩展,请使用以下命令。

ALTER EXTENSION extension_name UPDATE TO 'new_version';

有关受支持的 PostgreSQL 扩展版本列表,请参阅 支持的 PostgreSQL 扩展版本

要列出当前安装的扩展,请在以下命令中使用 PostgreSQL pg_extension 目录。

SELECT * FROM pg_extension;

要查看可用于安装的特定扩展版本的列表,请在以下命令中使用 PostgreSQL pg_available_extension_versions 视图。

SELECT * FROM pg_available_extension_versions;