全部产品
Search
文档中心

云数据库 RDS:升级数据库大版本

更新时间:Oct 19, 2023

本文介绍如何升级RDS PostgreSQL数据库大版本,例如从PostgreSQL 10升级至11。

PostgreSQL社区每年发布一个大版本,社区对每个大版本支持5年,大版本通常带来功能、性能方面的革命性提升,而超过5年的数据库版本,由于社区不再提供支持,性能和安全的风险也将逐渐增加。

重要

大版本升级会保留原实例,并创建一个新版本的实例,新实例在创建中不收费,创建成功后将会产生费用,计费方式为按量付费。新实例暂不继承原实例优惠,请根据实际情况选择是否升级。

为了让您享受PostgreSQL新的大版本带来的功能、性能提升,同时降低升级风险,RDS PostgreSQL提供大版本升级功能,步骤如下:

  1. 创建升级检查报告

    检查当前主实例是否支持大版本升级,并提供检查结果和检查报告,检查报告异常时不允许升级。

  2. 执行升级

    说明

    大版本升级可能会出现与现有应用的兼容性问题,因此建议先使用不割接模式升级并进行业务测试。

    1. 指定PostgreSQL大版本进行升级,选择不割接创建一个新版本的测试实例进行业务测试及确保兼容性。

    2. 测试结束后,在原实例上再次执行大版本升级,选择割接创建一个新版本的实例用于升级后使用。

注意事项

  • 升级大版本前需要满足以下前提条件:

    • 版本:PostgreSQL 14、13、12、11、10、9.4

      说明

      PostgreSQL 9.4最高仅支持直接升级到PostgreSQL 14,如果您需要升级到PostgreSQL 15,则请先升级到PostgreSQL 10、11、12、13或14,然后再升级到PostgreSQL 15。

    • 系列:高可用系列基础系列

    • 网络类型:专有网络。

      如果网络类型为经典网络,您需要将网络类型切换为专有网络,并且切换时不选择保留原经典网络。如何查看或切换网络类型,请参见更改网络类型

      说明

      切换为专有网络时,如果您选择了保留原经典网络,则需要等待经典网络保留时间结束后,才能启动大版本升级任务。

    • 实例不是只读实例专属集群实例

    • 实例ID不是以pg-cn开头。

  • 升级大版本将会造成以下影响:

    • 如果选择了割接方式升级,在割接过程中,原实例将会被设置为只读,并会造成分钟级业务闪断,请在业务低峰期进行升级。如果选择不割接方式进行升级,则不受影响。

      说明
      • 原实例被设置只读时间的长短与数据库对象数量相关,实例数据库对象数越多,只读时间越长,当数据库对象数达到百万级别时,只读时间可能达到十分钟级甚至小时级。您可以使用SELECT count(1) FROM pg_class;命令查看数据库的对象数。

      • 具体的闪断时长取决于DNS缓存刷新时间。您可以尝试切换虚拟交换机,通过业务闪断时长来评估客户端的DNS缓存刷新时间。

      • 升级过程的时间长短与实例的数据量和数据库对象数量相关,实例数据量越大,数据库对象数越多,升级时间越长。

    • 如果原实例使用了新版本不支持的参数,在新版本中该参数会被自动删除,如果在低版本的参数取值不在高版本对应参数的合法区间,在新版本中该参数会被置为高版本参数模板的默认值。

    • 新实例不继承原实例的实例名称标签云监控报警规则以及备份数据

    • 如果待升级的实例作为数据传输服务(DTS)的源实例或目标实例,则升级后需要重建DTS任务。创建DTS任务详见DTS产品文档

    • 自建的只读节点和逻辑复制槽在升级后仍然保留在原实例下,不会自动转移到高版本实例,需要在升级后进行重建。

  • 当待升级的实例中创建了只读实例时,则无法直接进行升级,需要在升级前后进行以下操作:

    1. 将应用程序中配置的只读实例连接地址修改为主实例连接地址。

      说明

      为保证业务稳定,建议在业务低峰期修改应用连接地址。

    2. 删除只读实例。

    3. 升级大版本

    4. 升级完成后,在新实例上重新创建PostgreSQL只读实例

    5. 在应用程序中,将升级前修改的实例连接地址修改为新的只读实例连接地址。

  • 升级大版本将会使用最新的内核小版本,可能遇到插件兼容性问题,具体请参见升级内核小版本

功能特点

  • 支持跨版本升级:例如直接从PostgreSQL 10.0升级到PostgreSQL 13.0。

  • 支持升级演练:通过不割接的方式,可以在不影响原实例的情况下,验证整个升级流程。

  • 支持平滑升级

    • 无需修改应用:通过割接方式升级,您无需修改应用中已配置的数据库连接地址,割接结束会自动交换原实例与新实例的连接地址,应用将自动连接到新实例。

      说明

      通过割接方式升级后,新实例的虚拟IP(Virtual IP Address)与原实例不同,如果您在应用程序中配置了虚拟IP,则需要修改应用,因此,建议您在应用程序中配置实例连接地址,如何获取实例连接地址,请参见查看或修改连接地址和端口

    • 无需停机:升级时原实例无需停机,而是暂时变为只读状态(持续时长为分钟级),降低业务中断带来的风险。此外,由于是通过克隆实例进行升级,所以即使升级失败也不会影响原实例。

    • 保留实例设置

      • 升级后保留原实例的白名单、参数设置、插件(新版本不支持的插件和参数除外)。

      • 加密实例升级大版本后仍为加密实例,加密Key保持不变。

计费方式

升级后产生的新实例的计费方式统一为按量付费,您可以在确认业务平稳运行后执行如下操作:

  1. 将新实例转成包年包月

  2. 将原实例释放或退订

    重要

    如果原实例付费类型为包年包月且尚未到期,释放实例可能存在费用损失。

升级大版本

  1. 如果待升级的实例中创建了只读实例,需在升级前执行以下步骤:

    1. 将应用程序中配置的只读实例连接地址修改为主实例连接地址。

      说明

      为保证业务稳定,建议在业务低峰期修改应用连接地址。

    2. 删除只读实例。

  2. 进入大版本升级页面。

    1. 访问RDS实例列表,在上方选择地域,然后单击目标实例ID。
    2. 在左侧导航栏单击大版本升级

      说明

      如果您在控制台中未看到大版本升级,请检查您的RDS PostgreSQL实例版本及系列等配置,具体请参见注意事项

  3. 升级检查页签中,选择目标升级版本,然后单击创建升级检查报告,并等待数分钟。

    说明
    • 为确保升级能顺利完成,请确保升级检查报告的检查结果为成功时,再进行后续升级步骤。

    • 升级检查成功后,如果对主实例执行了CREATE EXTENSION操作,需重新执行检查。

    当升级检查报告的检查结果为失败时,可单击查看信息查看报告详细内容,常见的报错及原因请参见解读RDS PostgreSQL大版本升级检查报告

  4. 单击升级实例页签,阅读警告内容,然后选择升级版本,并单击继续创建升级实例

  5. 在弹出的窗口中确认注意事项,单击确定,并设置参数(以下仅列举重点参数):

    配置

    说明

    存储类型

    选择实例的存储类型。

    大版本升级功能基于云盘快照,当前升级后支持选择的存储类型如下。

    • 当原实例为SSD云盘时,可选ESSD PL1云盘、ESSD PL2 云盘、ESSD PL3 云盘、SSD云盘。

      说明

      SSD云盘已下线,建议您升级至ESSD云盘,享受更高的读写性能。更多信息,请参见【停售/下线】2022年07月01日起部分RDS实例不再提供SSD云盘售卖

    • 当原实例为ESSD云盘时,可选ESSD PL1云盘、ESSD PL2 云盘、ESSD PL3 云盘。

    • 当原实例为本地SSD盘时,可选ESSD PL1云盘、ESSD PL2 云盘、ESSD PL3 云盘。

    目标主可用区·

    系统支持升级后将新的主备实例配置到其他可用区。

    目标备可用区

    目标主实例交换机

    目标备实例交换机

    割接配置

    系统将创建一个新实例进行数据迁移。请选择迁移后是否自动切换至新实例。

    • 不割接:不自动切换。此选项一般用于正式升级之前测试当前业务在新版本中的兼容性。建议第一次执行时选择不割接,应用层完全测试验证通过后,释放实例并重复升级大版本操作,选择割接开始正式升级。

      说明
      • 迁移过程中,原实例的业务不会受到影响。

      • 如需通过不割接升级实例,需在迁移完成后把应用程序中的数据库连接地址改为新实例的连接地址。如何查看连接地址,请参见查看或修改连接地址和端口

    • 割接:自动切换。您无需更改应用程序里的数据库连接地址,割接结束会自动连接到新实例。此选项一般用于在确认业务可以稳定运行在新版本之后执行正式升级。

      说明
      • 割接后无法回退,请谨慎选择。

      • 切换过程中,原实例会被变为只读,业务无法写入,请务必在业务低峰期进行。

      • 如果原实例中创建了只读实例,则无法选择割接。只能通过不割接升级实例,且原只读实例不会被克隆。升级完成后,您需要在新版本实例中另行创建PostgreSQL只读实例

    割接时间

    迁移完成后,业务切换至新实例的时间。

    • 立刻:迁移完成后立即切换。

    • 实例可运维时间:在可运维时间段内切换。

    说明

    仅当割接配置割接时可选。

    统计信息收集模式

    选择在哪个时间点对数据库执行统计信息收集。

    • 割接前收集:可以保证业务稳定性。如果实例数据量太大可能会导致升级时间较久。

    • 割接后收集:实例升级速度较快。升级后访问未生成统计信息的表可能导致执行计划不准确,业务高峰期还可能导致数据库宕机。

    说明

    对于不割接场景,割接前收集表示新实例开放读写前收集,割接后收集表示新实例开放读写后收集。

    存储空间

    选择新版本实例的存储空间大小。

    本地盘实例升级大版本时,支持存储空间缩容。可选择的最小存储空间需满足以下条件:

    • 以下两者中的最小值:

      • 原实例已使用存储空间 × 120%,如果计算结果(单位需计算为GB)不是5的倍数,则向上凑为5的倍数。

        说明

        原实例已使用存储空间,可通过监控与报警功能查看监控项磁盘空间 (MB),具体方法,请参见查看增强监控

      • 原实例存储空间。

    • 大于等于ESSD云盘可购买的最小值,不足时以如下值作为可购买最小值:

      • ESSD PL1云盘:20 GB。

      • ESSD PL2云盘:500 GB。

      • ESSD PL3云盘:1500 GB。

    说明

    例如:

    • 原实例存储空间为100 GB,已使用70 GB,升级大版本时,存储类型选择为ESSD PL1云盘。

      计算方法:70 × 120% = 84 GB,向上凑为5的倍数85 GB。因此,可购买的最小存储空间为85 GB。

    • 原实例存储空间为700 GB,已使用350 GB,升级大版本时,存储类型选择为ESSD PL2云盘。

      计算方法:350 × 120% = 420,420 GB小于ESSD PL2云盘可购买的最小值500 GB,因此,可购买的最小存储空间为500 GB。

    实例规格

    选择新版本实例的规格。有关实例规格的更多详情,请参见主实例规格列表

  6. 单击立即创建

    此时原实例状态变更为迁移中,并且实例列表中会多出一个状态为创建中的新实例。当两个实例的状态变更为运行中即代表创建或升级完成。具体时间取决于数据量,请耐心等待。

    说明
    • 升级任务创建后不支持修改或删除。

    • 原实例状态为迁移中时,实例不支持修改参数、重启、释放等运维操作。

  7. 如果在步骤一中删除了只读实例,则在升级后,还需执行以下步骤:

    1. 在新实例上重新创建PostgreSQL只读实例

    2. 在应用程序中,将步骤一中修改的实例连接地址修改为新的只读实例连接地址。

后续步骤

  1. 确认业务已稳定运行在新实例中后,将新实例转成包年包月

  2. 释放原实例

  3. 新实例不包含只读实例,您可以按需创建PostgreSQL只读实例

相关API

API

描述

UpgradeDBInstanceMajorVersionPrecheck

RDS PostgreSQL实例大版本升级检查

DescribeUpgradeMajorVersionPrecheckTask

查询RDS PostgreSQL实例大版本升级检查报告

UpgradeDBInstanceMajorVersion

RDS PostgreSQL实例升级数据库大版本

DescribeUpgradeMajorVersionTask

查询RDS PostgreSQL实例大版本升级历史任务

常见问题

大版本升级期间,是否能变更实例?比如变更实例规格?

大版本升级期间不支持变更实例,必须在大版本升级完成后,才可以进行其他操作。

大版本是否支持自动升级?

暂不支持自动升级数据库大版本。

升级数据库大版本后,在新实例中创建raster_overviews视图时,提示raster_overviews冲突,如何处理?

如果PostGIS版本小于2.5.2且RDS PostgreSQL内核版本为10或11,升级插件后,再升级数据库大版本到PostgreSQL12,在新实例中创建raster_overviews视图可能会出现raster_overviews冲突的问题。

解决方法如下:

  1. 在原实例中升级PostGIS插件版本。

    如下命令需执行两遍,以确保成功。

    SELECT PostGIS_Extensions_Upgrade();
    SELECT PostGIS_Extensions_Upgrade();
  2. 根据业务判断是否使用了PostGIS Raster插件,选择对应的升级方法。

    使用了PostGIS Raster插件
    1. 在原实例中执行如下命令,修改raster_overviews视图。

      ALTER EXTENSION PostGIS_Raster DROP VIEW raster_overviews;
      CREATE OR REPLACE VIEW raster_overviews AS SELECT 1;
    2. 对PostgreSQL实例进行大版本升级,至少升级到PostgreSQL 12或以上版本。

    3. 升级完成后,在新实例中重新创建视图。

      CREATE 
      OR REPLACE VIEW raster_overviews AS 
      SELECT 
        current_database() AS o_table_catalog, 
        n.nspname AS o_table_schema, 
        c.relname AS o_table_name, 
        a.attname AS o_raster_column, 
        current_database() AS r_table_catalog, 
        split_part(
          split_part(s.consrc, '''::name', 1), 
          '''', 
          2
        ): :name AS r_table_schema, 
        split_part(
          split_part(s.consrc, '''::name', 2), 
          '''', 
          2
        ): :name AS r_table_name, 
        split_part(
          split_part(s.consrc, '''::name', 3), 
          '''', 
          2
        ): :name AS r_raster_column, 
        trim(
          both 
          from 
            split_part(s.consrc, ',', 2)
        ): :integer AS overview_factor 
      FROM 
        pg_class c, 
        pg_attribute a, 
        pg_type t, 
        pg_namespace n, 
        (
          SELECT 
            connamespace, 
            conrelid, 
            conkey, 
            pg_get_constraintdef(oid) As consrc 
          FROM 
            pg_constraint
        ) AS s 
      WHERE 
        t.typname = 'raster' : :name 
        AND a.attisdropped = false 
        AND a.atttypid = t.oid 
        AND a.attrelid = c.oid 
        AND c.relnamespace = n.oid 
        AND c.relkind = ANY(
          ARRAY[ 'r' : :char, 'v' : :char, 'm' : :char, 
          'f' : :char ]
        ) 
        AND s.connamespace = n.oid 
        AND s.conrelid = c.oid 
        AND s.consrc LIKE '%_overview_constraint(%' 
        AND NOT pg_is_other_temp_schema(c.relnamespace) 
        AND has_table_privilege(c.oid, 'SELECT' : :text); ALTER EXTENSION PostGIS_Raster 
      ADD 
        VIEW raster_overviews;
    未使用PostGIS Raster插件
    1. 在原实例中执行如下命令删除插件。

      DROP EXTENSION PostGIS_Raster;
    2. 对PostgreSQL实例进行大版本升级,至少升级到PostgreSQL 12或以上版本。