操作场景
RDS for PostgreSQL支持通过界面升级引擎大版本,目前支持以下两种升级方式:
不割接模式:用于新版本业务兼容性测试。大版本升级可能导致业务兼容性问题,强烈建议业务进行充分兼容性测试,测试通过后,再进行割接模式升级。使用不割接模式升级,不会影响原实例。
割接模式:割接升级过程中,原实例会设置为只读,并存在业务分钟级闪断。升级完成后,会自动交换实例VIP,业务无需更改,即可完成升级。
功能约束限制
以下版本的实例支持进行大版本升级:
− 对于PostgreSQL 9.5版本,小版本为9.5.25及以上。
− 对于PostgreSQL 9.6版本,小版本为9.6.24及以上。
− 对于PostgreSQL 10版本,小版本为10.21及以上。
− 对于PostgreSQL 12版本,小版本为12.7及以上。
− 对于PostgreSQL 13版本,小版本为13.3及以上。
− 对于PostgreSQL 14版本,小版本为14.4及以上。
− 对于PostgreSQL 15版本,小版本为15.4及以上。
− 对于PostgreSQL 11版本,不支持大版本升级。由于操作系统限制,部分实例暂不支持进行大版本升级,具体可升级版本查看界面可升级列表。
灾备实例不支持大版本升级。
大版本升级前,需要先进行升级检查,如果在有效期内没有检查成功的报告,则不允许进行大版本升级。
升级插件限制说明
在大版本升级检查成功后,如果大版本升级路径中,实例安装有下表中的插件,需要提前卸载,在大版本升级完成后再重新安装。否则,会导致实例升级失败,或者实例升级后由于插件无法升级导致插件不能正常使用。
表 插件限制说明
源版本 | 目标版本 | 导致实例升级失败的插件 | 实例升级后无法正常使用的插件 |
---|---|---|---|
12 | 13 | orafce, postgis_sfcgal | address_standardizer_data_us, pgaudit |
14 | orafce, postgis_sfcgal | anon, pgaudit | |
15 | orafce, postgis_sfcgal | anon, pgaudit | |
16 | orafce, postgis_sfcgal, pgl_ddl_deploy | anon, pgaudit | |
13 | 14 | - | anon, pgaudit,pg_stat_kcache |
15 | - | anon, pgaudit,pg_stat_kcache | |
16 | pgl_ddl_deploy | anon, pgaudit,pg_stat_kcache | |
14 | 15 | - | pgaudit,pg_stat_kcache |
16 | pgl_ddl_deploy | pgaudit,pg_stat_kcache | |
15 | 16 | pgl_ddl_deploy | pgaudit |
注意事项
如果要升级到PostgreSQL 15或者PostgreSQL16版本,需要确保OS为HCE镜像。否则在大版本页面无法选择目标版本。
割接模式下,大版本升级完成后,若发现业务不兼容,需要回退。
注意
升级完成后新增的数据,原实例不会进行自动同步。
大版本升级完成后,会新建一个实例,原有实例依然保留并计费,在业务稳定后您可以选择释放原有实例。
大版本升级后,原实例的审计日志、错误日志、慢日志仍保留在原实例,新实例只能查看该实例后续生成的日志记录。
大版本升级后,如果原实例开启磁盘加密,新实例会同步开启磁盘加密。
只读实例无法进行大版本升级。若当前实例存在只读实例,大版本升级完成后,只读实例不会同步升级,需要重新创建,请参见创建只读实例。
大版本升级会有以下影响:
− 使用割接方式升级,升级过程中,原实例会设置为只读,并造成业务分钟级闪断,请在业务低峰期进行升级。使用不割接方式升级时,没有任何影响。
注意
只读设置通过参数“default_transaction_read_only”控制,请检查业务中是否存在修改参数“default_transaction_read_only”的情况,如果存在,则会导致在割接期间实例插入的数据在升级完成后丢失。
− 大版本升级完成后,参数有以下变化:
原实例中修改的参数,自动同步修改到新版本;没有修改的参数将使用新版本默认参数值。
如果原实例使用了新版本不支持的参数,新版本会自动删除。
如果原实例中参数取值不在新版本对应参数的合法区间,新版本中使用参数模板默认值。
大版本升级不会升级插件版本,参考支持的插件列表,若新版本支持更高版本的插件,您可使用命令ALTER EXTENSION extension_name UPDATE TO 'new_version';更新插件,或者卸载并重新安装最新版本插件。
注意
当数据库进行大版本升级时,部分已安装的插件会导致升级任务失败,请先卸载相关插件后再进行大版本升级。
不支持大版本升级的插件包括:postgis
操作步骤
步骤 1 登录管理控制台。
步骤 2 单击管理控制台左上角的 ,选择区域。
步骤 3 选择“数据库 > 关系型数据库”。进入关系型数据库信息页面。
步骤 4 在实例列表,单击实例名称,进入实例的基本信息页面。
步骤 5 在左侧导航栏,选择“大版本升级”。
步骤 6 在“大版本升级”页签,选择目标升级版本,单击“立即检查”,等待几分钟。
说明
升级检查成功后,如果有新创建插件,可能会因为不兼容,导致升级失败,建议重新进行升级检查。
若升级检查失败,您可在检查历史中查看升级检查报告,根据报告内容修改数据中存在的不兼容情况。
步骤 7 检查成功后,单击“下一步”,进入升级页面,确认升级注意事项后,单击“立即升级”,进行大版本升级。
步骤 8 选择是否割接,以及统计信息收集模式。
说明
大版本升级时,不会自动同步优化器统计信息,因此需要在升级完成后进行统计信息收集。
割接前收集:可以保证业务稳定性。如果实例数据量太大可能会导致升级时间较久。
割接后收集:实例升级速度较快。升级后访问未生成统计信息的表可能导致执行计划不准确,业务高峰期还可能导致数据库宕机。
----结束
查看升级检查报告和升级报告
当升级检查失败或升级失败时,可通过升级检查报告或升级报告来分析失败的原因,步骤如下:
1. 查看“pg_upgrade_internal.log”。
“pg_upgrade_internal.log”为升级检查报告或升级报告的主要日志文件,当操作失败,首先查看该文件内容,查看相关报错。常见的报错如下:
− A list of problem libraries is in the file: loadable_libraries.txt
存在高版本不兼容的插件,插件列表记录在“loadable_libraries.txt”文件中。
− A list of tables with the problem is in the file: tables_with_oids.txt
建表时声明了WITH OIDS,该声明在PostgreSQL 12或以上版本不支持,相关表被记录在“tables_with_oids.txt”文件中。
− Consult the last few lines of "pg_upgrade_server.log" for the probable cause of failure.
升级检查时,高版本启动失败,具体原因在“pg_upgrade_server.log”报告项中查看。
− Consult the last few lines of "pg_upgrade_dump_xxxx.log" for the probable cause of failure.
升级过程中,pg_dump失败,具体原因在“pg_upgrade_dump_xxxx.log”报告项中查看。
2. 根据“pg_upgrade_internal.log”中的信息,在对应的报告项中分析原因。
− loadable_libraries.txt
展示不兼容的library,通常对应了不兼容的插件。排查“loadable_libraries.txt”中列出的插件,根据实际需要进行评估是否删除,建议在不影响业务稳定的情况下删除后升级。
− tables_with_oids.txt
展示声明了WITH OIDS的表清单。排查“tables_with_oids.txt”中列出的表,评估业务代码中是否对OID有依赖,确认不影响业务之后,执行以下SQL:
ALTER TABLE {table_name} SET WITHOUT OIDS;
− pg_upgrade_server.log
查看“pg_upgrade_server.log”的最后几行信息,如果存在如下报错,则说明高版本中不存在xxx插件,根据实际业务,评估可删除xxx插件,并在shared_preload_libraries中删除xxx,建议在不影响业务稳定的情况下删除后升级。
FATLA: could not access file "xxx": No such file or directory.
示例:
FATLA: could not access file "pg_pathman": No such file or directory.
− pg_upgrade_dump_xxxx.log
查看“pg_upgrade_dump_xxxx.log”最后几行信息,如果存在如下报错,则说明当前实例中表的数量过多,按照提示需适当增加max_locks_per_transaction参数值,并重新升级。
pg_dump: error: query failed: ERROR: out of shared memory
HINT: You might need to increase max_locks_per_transaction.
pg_dump:error: query was: LOCK TABLE "xxx"."xxx" IN ACCESSSHARE MODE
查看“pg_upgrade_dump_xxxx.log”最后几行信息,如果存在如下报错,是因为当前实例中存在插件pgl_ddl_deploy,该插件高低版本不兼容,导致升级失败。请根据升级插件限制说明排查实例中是否存在其他不兼容的三方插件(部分三方插件的兼容性无法通过升级检查识别出来),根据实际需要进行评估是否删除,建议在不影响业务稳定的情况下删除后升级。
pg_restore: error: could not execute query: ERROR: could not find function "xxx" in file xxx
Command was: CREATE FUNCTION "pgl_ddl_deploy"."xxx"