检查项
如果您在升级数据库大版本的升级检查步骤,检查报告的结果为失败,可以单击查看信息查看检查报告的详细内容。
如下是检查报告中的检查模块及常见的报错:
user_check_report
检查内容
检查是否存在后台添加的多余超级账号或者加密方式不正确的普通账号。
常见报错
invalid superuser: ["user_01"]
可能原因
存在冗余的超级账号,使用此账号连接数据库将会使数据库只读设置无效,从而导致与大版本升级的数据不一致。
解决办法
冗余的超级账号请提工单联系售后服务删除。
invalid user: ["user_02"]
可能原因
存在异常的普通账号,此账号将会导致升级后账号无法连接。
解决办法
重置报错账号的密码。
pg_upgrade_internal.log
检查内容
检查大版本间是否存在不兼容的插件、关键字等。
常见报错
A list of problem libraries is in the file: loadable_libraries.txt
可能原因
存在高版本不兼容的插件,相关插件被记录在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文件中。
解决办法
方法一(推荐):升级到PostgreSQL 11版本,该版本支持声明WITH OIDS
。
方法二:排查tables_with_oids.txt报告项列出的表,请自行评估业务代码是否对OID有依赖,确认不影响业务之后,执行以下语句:
ALTER TABLE {table_name} SET WITHOUT OIDS;
pg_upgrade_server.log
展示目标实例启动的日志。
other_log_info
检查内容
用于记录目标版本为PostgreSQL 15或以上版本的函数不兼容情况。
常见报错
[/data/pg_upgrade_data/pg_upgrade_output.d/20231109T142221.890/incompatible_polymorphics.txt]
In database: cti_link_conf_db
aggregate: public.group_concat(anyelement)
可能原因
源库中存在函数(本示例为group_concat(anyelement)
)在PostgreSQL 15或以上版本中不兼容。根据实际需要进行评估是否删除,建议在不影响业务稳定的情况下删除后升级。
解决办法
使用如下语句删除不兼容的函数。
DROP FUNCTION IF EXISTS <需删除的函数>;
附录
loadable_libraries.txt
展示不兼容的library,通常对应了不兼容的插件。
如下是常见的不兼容插件及解决办法:
pgrouting插件
可能原因
选定的高版本中不支持pgrouting插件。
解决办法
根据实际需要进行评估是否删除,建议在不影响业务稳定的情况下删除后升级。各版本支持的插件列表请参见:支持插件列表。
jsonbx插件
可能原因
PostgreSQL 9.4对JSON类型支持不完善,需要jsonbx插件支持,PostgreSQL 10或以上版本原生支持JSON,没有该插件。
解决办法
请在高版本中验证jsonbx插件的相关函数使用,根据实际需要进行评估是否删除插件,然后在不影响业务稳定的情况下删除后再升级。
jsonbx插件函数使用差异如下:
函数用法 | PostgreSQL 9.4执行结果 | PostgreSQL 10或以上版本执行结果 |
select '{"a":1, "b":2, "c":3}'::jsonb - 2; | {"a": 1, "b": 2} | ERROR: cannot delete from object using integer index |
select jsonb_delete('{"a":1, "b":2, "c":3}'::jsonb, '{b}'::text[]); | {"a": 1, "c": 3} | ERROR: function jsonb_delete(jsonb, text[]) does not exist |
select '{"a":{"c":1, "d":2}, "b":3}'::jsonb - '{a, c}'::text[]; | {"a": {"d": 2}, "b": 3} | {"b": 3} |
postgis、postgis_topology插件
可能原因
postgis插件版本过低,与选定的高版本lib库不匹配,升级检查失败。
解决办法
重要 postgis插件各版本间存在差异(例如wkt格式的解析报错不同),升级后可能影响业务处理,建议在升级postgis插件前,先克隆当前实例,在克隆实例中对postgis插件进行升级测试,完全符合业务需求后,再在原实例中升级postgis插件。克隆的具体操作,请参见备份PostgreSQL数据和恢复PostgreSQL数据。
升级内核小版本。更多信息,请参见升级内核小版本。
更新报错提示的postgis插件。更多信息,请参见PostGIS插件升级。
执行\dx
命令查询插件版本,确保postgis插件版本至少为3.3.2。
重新进行升级检查。
重要 不同PostgreSQL实例版本安装postgis、postgis_topology或pgrouting插件后,升级大版本存在如下限制:
PostgreSQL 9.4:暂时仅支持升级到PostgreSQL 10或11。
PostgreSQL 10:暂时仅支持升级到PostgreSQL 11。
PostgreSQL 11、12和13:暂不支持升级。
tables_with_oids.txt
展示声明了WITH OIDS
的表清单。