

# 升级 RDS for PostgreSQL 数据库引擎
<a name="USER_UpgradeDBInstance.PostgreSQL"></a>

您可以为 PostgreSQL 数据库管理两种类型的升级：
+ 操作系统更新 – 有时，为了应用安全修复或操作系统更改，Amazon RDS 可能需要更新数据库的基础操作系统。您可通过使用 Amazon Command Line Interface（Amazon CLI）或 RDS API 来决定 Amazon RDS 何时应用操作系统更新。有关操作系统更新的更多信息，请参阅 [对数据库实例应用更新](USER_UpgradeDBInstance.Maintenance.md#USER_UpgradeDBInstance.OSUpgrades)。
+  数据库引擎升级 – 如果 Amazon RDS 支持数据库引擎的新版本，您可以将您的数据库升级到新版本。

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

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

**主要版本升级。**  
*主要版本升级*会包含不与现有应用程序向后兼容的数据库更改。因此，您必须手动执行数据库的主要版本升级。您可以通过修改数据库实例或多可用区数据库集群来启动主要版本升级。在执行主要版本升级之前，建议您按照[为 RDS for PostgreSQL 升级选择主要版本](USER_UpgradeDBInstance.PostgreSQL.MajorVersion.md)中所述的步骤操作。  
Amazon RDS 通过以下方式处理多可用区主版本升级：  
+ **多可用区数据库实例部署** – Amazon RDS 会同时升级主实例和任何备用实例。在升级完成期间，数据库可能会在几分钟内不可用。
+ **多可用区数据库集群部署** – Amazon RDS 同时升级写入器和读取器实例。在升级完成期间，数据库可能会在几分钟内不可用。
如果您升级具有区域内只读副本的数据库实例，Amazon RDS 会升级副本以及主数据库实例。  
Amazon RDS 不会升级多可用区数据库集群只读副本。如果您对多可用区数据库集群执行主要版本升级，则其只读副本的复制状态会更改为**终止**。升级完成后，您必须手动删除并重新创建只读副本。  
您可以使用蓝绿部署，最大限度地减少主要版本升级所需的停机时间。有关更多信息，请参阅 [使用 Amazon RDS 蓝绿部署进行数据库更新](blue-green-deployments.md)。

**次要版本升级**  
相比之下，*次要版本升级*仅包括与现有应用程序向后兼容的更改。您可以通过修改数据库来手动启动次要版本升级。或者，您可以在创建或修改数据库时启用**自动次要版本升级**选项。这样做意味着 Amazon RDS 会在测试并批准新版本后自动升级您的数据库。  
Amazon RDS 通过以下方式处理多可用区次要版本升级：  
+ **多可用区数据库实例部署** – Amazon RDS 会同时升级主实例和任何备用实例。在升级完成期间，数据库可能会在几分钟内不可用。
+ **多可用区数据库集群部署** – Amazon RDS 一次升级一个读取器数据库实例。然后，其中一个读取器数据库实例将切换为新的写入器数据库实例。然后，Amazon RDS 升级旧的写入器实例（现在是读取器实例）。多可用区数据库集群通常可将次要版本升级的停机时间缩短至大约 35 秒。与 RDS 代理一起使用时，这种方法可以将停机时间进一步缩短到一秒或更短。有关更多信息，请参阅 [Amazon RDS 代理](rds-proxy.md)。或者，您可以使用开源数据库代理，例如 [ProxySQL](https://www.amazonaws.cn/blogs/database/achieve-one-second-or-less-of-downtime-with-proxysql-when-upgrading-amazon-rds-multi-az-deployments-with-two-readable-standbys/)、[PgBouncer](https://www.amazonaws.cn/blogs/database/fast-switchovers-with-pgbouncer-on-amazon-rds-multi-az-deployments-with-two-readable-standbys-for-postgresql/) 或 [Amazon Advanced JDBC Wrapper Driver](https://www.amazonaws.cn/blogs/database/achieve-one-second-or-less-downtime-with-the-advanced-jdbc-wrapper-driver-when-upgrading-amazon-rds-multi-az-db-clusters/)。
如果数据库具有只读副本，则您必须在升级源实例或集群之前首先升级所有只读副本。  
有关更多信息，请参阅 [RDS for PostgreSQL 的自动次要版本升级](USER_UpgradeDBInstance.PostgreSQL.Minor.md)。有关手动执行次要版本升级的信息，请参阅 [手动升级引擎版本](USER_UpgradeDBInstance.Upgrading.md#USER_UpgradeDBInstance.Upgrading.Manual)。

有关数据库引擎版本和弃用数据库引擎版本的策略的更多信息，请参阅 Amazon RDS 常见问题解答中的[数据库引擎版本](https://www.amazonaws.cn/rds/faqs/#Database_Engine_Versions)。

**Topics**
+ [PostgreSQL 升级的注意事项](#USER_UpgradeDBInstance.PostgreSQL.Considerations)
+ [查找有效的升级目标](#USER_UpgradeDBInstance.PostgreSQL.FindingTargets)
+ [PostgreSQL 版本号](USER_UpgradeDBInstance.PostgreSQL.VersionID.md)
+ [RDS for PostgreSQL 中的 RDS 版本号](USER_UpgradeDBInstance.PostgreSQL.rds.version.md)
+ [为 RDS for PostgreSQL 升级选择主要版本](USER_UpgradeDBInstance.PostgreSQL.MajorVersion.md)
+ [如何执行 RDS for PostgreSQL 的主要版本升级](USER_UpgradeDBInstance.PostgreSQL.MajorVersion.Process.md)
+ [RDS for PostgreSQL 的自动次要版本升级](USER_UpgradeDBInstance.PostgreSQL.Minor.md)
+ [在 RDS for PostgreSQL 数据库中升级 PostgreSQL 扩展](USER_UpgradeDBInstance.PostgreSQL.ExtensionUpgrades.md)
+ [使用事件监控 RDS for PostgreSQL 引擎升级](USER_UpgradeDBInstance.PostgreSQL.Monitoring.md)

## PostgreSQL 升级的注意事项
<a name="USER_UpgradeDBInstance.PostgreSQL.Considerations"></a>

为了安全地升级数据库，Amazon RDS 使用 [PostgreSQL documentation](https://www.postgresql.org/docs/current/pgupgrade.html) 中所述的 `pg_upgrade` 实用程序

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

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

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

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

## 查找有效的升级目标
<a name="USER_UpgradeDBInstance.PostgreSQL.FindingTargets"></a>

使用 Amazon Web Services 管理控制台 升级数据库时，它会显示数据库的有效升级目标。您还可以使用以下 Amazon 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 版本 16.1 数据库的有效升级目标，请运行以下 Amazon CLI 命令：

对于 Linux、macOS 或 Unix：

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

对于：Windows

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