将RDS PostgreSQL引擎从10.21版本升级到14.4版本。

0

【以下的问题经过翻译处理】 在进行主要升级之前,我们需要更新某些扩展。因此,在我们的情况下,我们有PostGis扩展版本为“2.5.2”,需要更改为“3.1.5”。

我按照文档中的步骤进行了操作,即https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.PostgreSQL.CommonDBATasks.PostGIS.html#Appendix.PostgreSQL.CommonDBATasks.PostGIS.Update:~:text=1%0A(1%20row)-,Step%206%3A%20Upgrade%20the%20PostGIS%20extension,-Each%20new%20release

1> PostGIS已更新为3.1.5,但无法更新'postgis_raster'扩展,这是postgis的一个依赖项。但是,此依赖性扩展未在以下命令输出中显示-> SELECT * FROM pg_extension; 要完成扩展的升级,请运行升级命令:SELECT postgis_extensions_upgrade();

2> 但是,上述命令会出现以下错误: ERROR: function postgis_extensions_upgrade() does not exist LINE 1: SELECT postgis_extensions_upgrade(); HINT: No function matches the given name and argument types. You might need to add explicit type casts.

3> 当我在RDS中修改引擎版本时,预检日志发送以下错误: **由于以下原因,实例无法从10.21.R1升级到14.4.R1,请在请求的主引擎版本升级之前对具有不兼容用法的数据库采取适当措施并重试。

  • 在升级之前需要更正以下数据库'DB_NAME'中的用法: -- 无法升级实例,因为PostGIS扩展及其依赖扩展(address_standardizer,address_standardizer_data_us,postgis_tiger_geocoder,postgis_topology,postgis_r
profile picture
专家
已提问 10 个月前47 查看次数
1 回答
0

【以下的回答经过翻译处理】 你好yanshul,

这个问题可能是由于数据库中存在旧版本的postgis_raster(在新版本上不受支持),这些旧版本被安装为函数而不是扩展,因此当你运行“show rds.extensions”时将不会显示出来。

我能够重现这个问题,以下是解决它的步骤。

  • 首先检查数据库中是否仍有与版本2 RASTER相关的任何函数或库:

postgres=> select probin from pg_proc where proname = 'postgis_raster_lib_version';

probin

---------+-------

$libdir/rtpostgis-2.5

  • 检查版本2中创建的对象的数量:

postgres=> SELECT probin, count(*) FROM pg_proc WHERE probin LIKE '%postgis%' GROUP BY probin;

probin | count

-----------------+-------

$libdir/rtpostgis-2.5 | 104

  • 现在在你遇到问题的数据库中添加PostGIS扩展程序(如果未安装):

CREATE EXTENSION postgis; (这将创建3.1.5版本的扩展程序)

  • 要检查完整的PostGIS扩展版本,包括“RASTER lib”版本和状态:

postgres=> SELECT postgis_full_version();

postgis_full_version

-----------------+-------

POSTGIS="3.1.5 c60e4e3" [EXTENSION] PGSQL="100" GEOS="3.7.3-CAPI-1.11.3 b50468f" PROJ="Rel. 4.9.3, 15 August 2016" GDAL="GDAL 2.1.4, released 2017/06/23" LIBXML="2.9.1" LIBJSON="0.12.1" LIBPROTOBUF="1.3.0" WAGYU="0.5.0 (Internal)" RASTER (raster lib from "2.5.5 r0" need upgrade) [UNPACKAGED!] (raster procs from "2.5.5 r0" need upgrade)

  • 我们需要删除与版本2相关的库。要做到这一点,请使用主用户登录并删除 'postgis_raster_lib_version'。

postgres=> drop function postgis_raster_lib_version; DROP FUNCTION

postgres=> select * from pg_proc where proname = 'postgis_raster_lib_version'; proname | pronamespace | proowner | prolang | procost | prorows | provariadic | protransform | proisagg | proiswindow | prosecdef | proleakproof | proisstrict | proretset | provolatile | proparallel | pronargs | pronargdefaults | prorettype | proargtypes | proallargtypes | proargmodes | proargnames | proargdefaults | protrftypes | prosrc | probin | proconfig | proacl ---------+--------------+----------+---------+---------+---------+-------------+--------------+----------+- (0 rows)

  • D删除 PostGIS 扩展(这将删除 PostGIS 版本 3,但版本 2.X 将保持已安装状态):

DROP EXTENSION postgis CASCADE;

Drop all raster related type from database:

DROP TYPE raster CASCADE;

  • 查看版本 2 的栅格对象数量。

postgres=> SELECT probin,count(*) FROM pg_catalog.pg_proc WHERE probin LIKE '%postgis%' GROUP BY 1; probin | count -----------------------+------- $libdir/rtpostgis-2.5 | 8

  • 我们必须手工删除相关函数:

postgres=> SELECT proname FROM pg_catalog.pg_proc WHERE probin LIKE '%postgis%'; proname -----------------------+------- postgis_raster_lib_build_date postgis_gdal_version _st_summarystats_finalfn _st_histogram _st_quantile _st_valuecount st_gdaldrivers st_minpossiblevalue

postgres=> drop function postgis_raster_lib_build_date; DROP FUNCTION

postgres=> SELECT probin,count(*) FROM pg_catalog.pg_proc WHERE probin LIKE '%postgis%' GROUP BY 1; probin | count --------+------- (0 rows)

现在您可以返回到 AWS 管理控制台并升级 RDS PostgreSQL 实例。

profile picture
专家
已回答 10 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则