AWS 添加了对 Postgres 15.2 的支持。在启用 postgis 扩展的情况下升级到此版本失败并显示此错误消息:
The instance could not be upgraded because there are one or more databases with an older version of PostGIS extension or its dependent extensions (address_standardizer, address_standardizer_data_us, postgis_tiger_geocoder, postgis_topology, postgis_raster) installed. Please upgrade all installations of PostGIS and drop its dependent extensions and try again.
RDS实例安装了postgis
3.1.7
,没有升级扩展的路径。运行精确的升级命令ALTER EXTENSION postgis UPDATE TO "3.1.8";
导致
extension "postgis" has no update path from version "3.1.7" to version "3.1.8"
运行
SELECT postgis_extensions_upgrade();
命令应该升级扩展结果:
Upgrade completed, run SELECT postgis_full_version(); for details
,但是运行
SELECT postgis_full_version();
后的版本返回
POSTGIS="3.1.7 aafe1ff" [EXTENSION] PGSQL="140" GEOS="3.9.1-CAPI-1.14.2" PROJ="8.0.1" LIBXML="2.9.1" LIBJSON="0.15" LIBPROTOBUF="1.3.2" WAGYU="0.5.0 (Internal)"
postgis_raster
扩展已损坏,我们没有使用它,也没有使用任何其他 postgis 扩展。只有核心 postgis 扩展。
有没有办法将 RDS 实例升级到 postgres。 15 不删除 postgis 扩展?
您可能只需要等待几天。 我今天受到这个确切问题的影响。几年前我在旧版本的 postgres 的 RDS 上发生了同样的问题。
据我所知,一段时间后 AWS 发布了一个新的 PostGIS 版本,然后我只需要运行您引用的命令。
注意:RDS 上的 PostgreSQL 15 是几天前的 2 月 28 日才宣布的。 https://aws.amazon.com/about-aws/whats-new/2023/02/amazon-rds-postgresql-major-version-15/
不幸的是,似乎为了使用 postgis 将 AWS RDS Postgres 实例从 14 升级到 15,您需要在升级前删除 postgis 扩展及其依赖扩展。这是因为升级过程要求所有 PostGIS 安装都在同一版本上,包括依赖扩展。
以下是使用 postgis 将 AWS RDS Postgres 实例升级到版本 15 时可以遵循的步骤:
在开始升级之前备份您的 RDS 实例 过程。
使用 PostgreSQL 客户端连接到您的 RDS 实例,例如 作为 pgAdmin 或 psql.
运行以下命令删除postgis 扩展及其依赖扩展:
DROP EXTENSION postgis CASCADE; DROP EXTENSION address_standardizer CASCADE; 删除扩展 address_standardizer_data_us CASCADE; 删除扩展 postgis_tiger_geocoder CASCADE; 删除扩展 postgis_topology CASCADE;
使用 AWS Management 将 RDS 实例升级到 Postgres 15.2 控制台或 AWS CLI。您可以找到有关如何操作的更多信息 这在 AWS 文档中。
升级完成后,运行以下命令进行安装 升级实例上的 postgis 扩展:
创建扩展 postgis;
如果您使用任何依赖扩展,例如 address_standardizer, address_standardizer_data_us, postgis_tiger_geocoder 或 postgis_topology,您可以重新安装它们 现在使用 CREATE EXTENSION 命令。
重要的是要注意删除 postgis 扩展将从数据库中删除所有空间数据。因此,在继续升级之前,您应该确保备份所有空间数据并在升级完成后将其恢复。