Amazon Relational Database Service
用户指南 (API 版本 2014-10-31)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

升级 PostgreSQL 数据库引擎

如果 Amazon RDS 支持数据库引擎的新版本,您可以将您的数据库实例升级到新版本。有两种升级方式:主版本升级和次要版本升级。

Amazon RDS 支持 PostgreSQL 数据库实例的主要和次要版本升级。

主版本升级会包含不与现有应用程序向后兼容的数据库更改。因此,Amazon RDS 不会自动应用主要版本升级;您必须手动修改数据库实例。您可以通过修改实例来手动启动主版本升级。但是,执行主版本升级时,可以按推荐步骤进行操作。有关详细信息,请参阅 主版本升级

您可以通过修改实例手动启动次要版本升级,或者在创建或修改数据库实例时选择 Auto Minor Version Upgrade 选项,以便在 Amazon RDS 测试并批准新版本之后使您的实例自动升级。

AWS RDS 不自动升级 PostgreSQL 扩展。要升级扩展,您必须使用 ALTER EXTENSION UPDATE 命令。例如,要在将 PostgreSQL 数据库引擎从 9.4.x 升级到 9.5.x 时升级 PostGIS,您应运行以下命令:

ALTER EXTENSION POSTGIS UPDATE TO '2.2.2'

注意

如果在 Amazon RDS PostgreSQL 实例中运行 PostGIS 扩展,请确保在升级 PostgreSQL 之前按照 PostGIS 升级说明进行操作。

升级概览

如果您的备份保留期大于 0,Amazon RDS 会在主要和次要升级期间获取两份数据库快照。第一个数据库快照是数据库实例在进行任何升级更改前的。如果无法完成数据库的升级,那么,就可以恢复此快照,创建一个运行旧版本的数据库实例。第二个数据库快照是在升级完成后制作的。

注意

如果您将数据库实例的备份保留期设置为大于 0 的数字,则 Amazon RDS 只需创建数据库快照。要更改您的备份保留期,请参阅 修改运行 PostgreSQL 数据库引擎的数据库实例

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

如果数据库实例在多可用区部署中,则同时升级主数据库实例和备用数据库实例。主实例和备用数据库实例将同时升级,在此期间服务会中断,直到升级完成。

主版本升级

主版本升级可包含不与数据库的以前版本向后兼容的数据库更改。此功能会导致现有应用程序无法正常工作。因此,Amazon RDS 不会自动应用主版本升级;您必须手动修改数据库实例来执行主版本升级。在将升级应用到生产数据库实例之前,您应该彻底地测试任何升级,确保您的应用程序可正常工作。我们推荐的最佳实践是,在您根据数据库快照还原的实例上执行主版本升级。

Amazon RDS 支持在以下版本中就地升级:

  • PostgreSQL 9.3.x 数据库实例升级到 PostgreSQL 9.4.x 数据库实例

  • PostgreSQL 9.4.x 数据库实例升级到 PostgreSQL 9.5.x 数据库实例

  • PostgreSQL 9.5.x 数据库实例升级到 PostgreSQL 9.6.x 数据库实例

Amazon RDS 使用 pg_upgrade 实用程序 (位于 http://www.postgresql.org/docs/9.4/static/pgupgrade.html) 安全升级您的实例。

由于在发布主版本 9.4 后发布了 9.3 的一些 PostgreSQL 次要版本更新,您无法从版本 9.3.9 升级到 9.4.1,也无法从版本 9.3.10 升级到 9.4.1 或 9.4.4。

只读副本无法进行主版本升级。源实例可进行主版本升级,但所有只读副本仍作为先前引擎版本上的可读取节点。在源实例升级后,其只读副本不能再复制在源实例上执行的更改。我们建议您提升只读副本,或者在源实例升级到其他主版本后删除并重新创建只读副本。

主版本升级流程

我们建议在升级 Amazon RDS PostgreSQL 数据库实例时采用以下流程:

  1. 准备一个版本兼容的参数组 – 如果您使用的是自定义参数组,必须为新的数据库引擎版本指定默认参数组,或者为其创建自定义参数组。在完成升级后,将新的参数组与数据库实例关联需要重新启动客户启动的数据库。如果需要重新启动该实例来应用参数组更改,则该实例的参数组状态将显示 pending-reboot。可在 AWS 控制台中查看实例的参数组状态,或者用“describe”调用查看,例如 describe-db-instances

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

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

      您可以使用以下查询确认您的实例上是否没有打开的已准备事务:

      SELECT count(*) FROM pg_catalog.pg_prepared_xacts;
    2. line数据类型 – 如果您正在升级 RDS PostgreSQL 9.3 实例,则必须在尝试升级前取消使用所有 line 数据类型,因为在 9.4 版之前 PostgreSQL 中未完全实施 line 数据类型。

      您可以通过对将升级的每个数据库使用以下查询,验证每个数据库中是否没有使用 line 数据类型:

      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 = 'pg_catalog.line'::pg_catalog.regtype AND c.relnamespace = n.oid AND n.nspname !~ '^pg_temp_' AND n.nspname !~ '^pg_toast_temp_' AND n.nspname NOT IN ('pg_catalog', 'information_schema');

      注意

      要列出实例上的所有数据库,请使用以下查询:

      SELECT d.datname FROM pg_catalog.pg_database d WHERE d.datallowconn = true;
    3. Reg* 数据类型 – 在尝试升级前取消使用所有 reg* 数据类型,因为这些数据类型包含的信息在 pg_upgrade 操作中无法保留。reg* 数据类型的使用不能升级,regtyperegclass 除外。请在尝试升级前取消所有对该数据类型的使用。

      您可以使用以下查询验证每个数据库中是否没有使用不支持的 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');

    在升级实例之前执行 VACUUM 操作。在您升级到不同主版本时,pg_upgrade 实用程序会对每个数据库执行 vacuum 操作。如果您没有执行过 VACUUM 操作,则升级过程可能会需要更长时间,从而导致您 RDS 实例的停机时间延长。

  3. 试验性运行主版本升级。我们强烈建议您先使用生产数据库的副本测试主版本升级,然后再对生产数据库真正执行升级。要创建副本测试实例,您可以从最近的快照还原数据库,或通过时间点还原将数据库还原到最近的可还原时间。完成主版本升级以后,应考虑利用相似的工作负载在升级后的数据库上测试您的应用程序,以验证一切是否工作正常。验证升级之后,您可以删除此测试实例。

  4. 我们建议您在执行主版本升级前执行备份,以便为您的数据库获得一个已知的还原点。请注意,我们在升级前后均会创建数据库实例的数据库快照。

  5. 升级您的生产实例。如果试验性运行主版本升级获得成功,您现在就可以放心地升级您的生产数据库。

您可以使用 Amazon RDS 查看 pg_upgrade 实用程序生成的两个日志:pg_upgrade_internal.logpg_upgrade_server.log。Amazon RDS 会在这些日志的文件名中附加时间戳。您可以像查看其他任何日志一样查看这些日志。

您不能通过执行时间点还原将实例还原到升级过程中的某一时间点。在升级过程中,RDS 会在开始执行升级后自动备份实例。您可以通过执行时间点还原,将实例还原到实例自动备份完成之后、升级操作开始之前的时间。

在主版本升级过程中,将会重命名 publictemplate1 数据库以及实例上每个数据库中的 public 架构。这些对象将显示在日志中,同时附加了它们的原始名称和随机字符串。附加字符串的目的是在主版本升级过程中保留 localeowner 等自定义设置。升级完成后,对象被重命名回它们的原始名称。

注意

完成升级后,您应运行查询 ANALYZE 操作来刷新 pg_statistic 表。

PostgreSQL 的次要版本升级

如果 Amazon RDS 已测试和批准某个次要升级,并且您选择了 Auto Minor Version Upgrade 选项,则次要版本升级将自动进行。在所有其他情况下,您必须手动修改数据库实例才能执行次要版本升级。如果在创建或修改数据库实例时选择了 Auto Minor Version Upgrade 选项,您可以在 Amazon RDS 测试并批准新版本后让实例自动升级。

如果 PostgreSQL 数据库实例使用只读副本,则必须先升级所有只读副本,然后再升级源实例。如果数据库实例在多可用区部署中,则同时升级主副本和备用副本,并且直到升级完毕后实例才可用。

AWS 管理控制台

对数据库实例应用数据库引擎主版本升级

  1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台:https://console.amazonaws.cn/rds/

  2. 在导航窗格中,选择 Instances

  3. 选中与要升级的数据库实例对应的复选框。

  4. 选择实例操作,然后选择修改

  5. 对于 DB Engine Version,选择新版本。

  6. 要立即升级,请选择 立即应用。要将升级推迟到下一维护时段,请清除 立即应用

  7. 选择 Continue

  8. 查看修改摘要信息。要继续进行升级,请选择 Modify DB Instance。要取消升级,请选择 CancelBack

CLI

要升级数据库实例的引擎版本,请使用 AWS CLI modify-db-instance 命令。指定以下参数:

  • --db-instance-identifier – 数据库实例的名称。

  • --engine-version – 数据库引擎要升级到的版本号。

  • --allow-major-version-upgrade – 升级主版本。

  • --no-apply-immediately – 在下一维护时段内应用更改。要立即应用更改,请使用 --apply-immediately

针对 Linux、OS X 或 Unix:

aws rds modify-db-instance \ --db-instance-identifier <mydbinstance> \ --engine-version <new_version> \ --allow-major-version-upgrade \ --apply-immediately

对于 Windows:

aws rds modify-db-instance ^ --db-instance-identifier <mydbinstance> ^ --engine-version <new_version> ^ --allow-major-version-upgrade ^ --apply-immediately

API

要升级数据库实例的引擎版本,请使用 ModifyDBInstance 操作。指定以下参数:

  • DBInstanceIdentifier – 数据库实例的名称,例如 mydbinstance

  • EngineVersion – 数据库引擎要升级到的版本号。

  • AllowMajorVersionUpgrade – 设置为 true 可升级主版本。

  • ApplyImmediately – 是立即应用更改还是在下一个维护时段内应用更改。要立即应用更改,请将该值设置为 true。要在下一个维护时段内应用更改,请将该值设置为 false

https://rds.us-east-1.amazonaws.com/ ?Action=ModifyDBInstance &ApplyImmediately=false &DBInstanceIdentifier=mydbinstance &EngineVersion=new_version &SignatureMethod=HmacSHA256 &SignatureVersion=4 &Version=2013-09-09 &X-Amz-Algorithm=AWS4-HMAC-SHA256 &X-Amz-Credential=AKIADQKE4SARGYLE/20131016/us-east-1/rds/aws4_request &X-Amz-Date=20131016T233051Z &X-Amz-SignedHeaders=content-type;host;user-agent;x-amz-content-sha256;x-amz-date &X-Amz-Signature=087a8eb41cb1ab5f99e81575f23e73757ffc6a1e42d7d2b30b9cc0be988cff97

相关主题