Amazon Relational Database Service
用户指南 (API Version 2014-10-31)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

升级 PostgreSQL 数据库引擎

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

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

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

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

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

Copy
ALTER EXTENSION POSTGIS UPDATE TO '2.2.2'

升级概览

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

注意

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

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

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

主要版本升级

主要版本升级可包含不与数据库的以前版本向后兼容的数据库更改。此功能会导致现有应用程序无法正常工作。因此,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. 准备的事务 – 在尝试升级前,提交或回滚所有打开的已准备事务。

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

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

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

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

      注意

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

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

      您可以使用以下查询验证每个数据库中是否没有使用不支持的 reg* 数据类型:

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

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

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

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

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

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

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

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. 选择 Instance Actions,然后选择 Modify

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

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

  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:

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

对于 Windows:

Copy
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

Copy
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

相关主题