PostGIS 版本阻止了 Amazon RDS 上的 PostgreSQL 升级

Posted

技术标签:

【中文标题】PostGIS 版本阻止了 Amazon RDS 上的 PostgreSQL 升级【英文标题】:PostgreSQL upgrade on Amazon RDS blocked by PostGIS version 【发布时间】:2017-07-26 20:30:00 【问题描述】:

我正在尝试将我的 RDS 实例从 9.5.4 升级到 9.6.1,但由于需要先升级 PostGIS 版本的错误而被阻止。

数据库实例处于无法升级的状态:升级前检查失败:无法升级实例,因为有一个或多个数据库安装了旧版本的 PostGIS。请升级所有 PostGIS 安装并重试。

RDS 9.5.4 支持的 PostGIS 最高版本为 2.2.2

更改扩展 postgis 更新

产量

注意:扩展“postgis”的“2.2.2”版本已经安装

我尝试显式升级到 9.6.1 中的版本

将扩展 postgis 更新为“2.3.0”

得到

[Err] 错误:扩展“postgis”没有从版本“2.2.2”到版本“2.3.0”的更新路径

所以我的问题是:如何升级?我怀疑我可以在升级之前删除扩展并在之后安装新版本,但我不知道这会对我的数据产生什么影响,或者这是否会正确升级我的空间结构或功能。

我已经检查了documentation 是否有提到这种情况

【问题讨论】:

有人找到解决方案了吗? 【参考方案1】:

确保您的实例在升级到 9.6.1 之前升级到 9.5.4。

我在我的一个数据库实例上遇到了同样的错误,但它是在 9.5.2 上。首先我将它升级到 9.5.4,然后升级到 9.6.1,一切都按预期运行。

我尝试的下一个实例已经在 9.5.4 上并收到了相同的消息。

所以首先我做了一个:

ALTER EXTENSION postgis UPDATE;

然后升级服务器

【讨论】:

我在 PostgreSQL 9.5.6 和 postgis 2.1.8 遇到了同样的问题,我无法更新。有什么想法吗? 你这样做了吗:ALTER EXTENSION postgis UPDATE; 也看到了这一点,即使在执行ALTER EXTENSION 之后也是如此。 PostGIS 之后只有 2.2.5。 这在将 v10.18 升级到 v13.4 的近 5 年后仍然有效。谢谢【参考方案2】:

我在尝试将服务器从 9.3 升级到 9.6 时遇到了这个确切的问题。通过一些尝试和错误,我找到了一条成功的道路。只是关于升级过程的一个细节:每次升级后,RDS 都需要手动重启。我认为升级会自动处理这个问题,但事实并非如此。

起点:

SELECT version(); ->  PostgreSQL 9.3.20 on x86_64-unknown-linux-gnu, compiled by gcc (GCC) 4.8.3 20140911 (Red Hat 4.8.3-9), 64-bit
SELECT postgis_full_version(); ->  POSTGIS="2.1.8 r13780" GEOS="3.5.0-CAPI-1.9.0 r4084" PROJ="Rel. 4.9.2, 08 September 2015" GDAL="GDAL 1.11.5, released 2016/07/01" LIBXML="2.9.1" LIBJSON="UNKNOWN" RASTER
ALTER EXTENSION postgis UPDATE; ->  Returned success, but no change to PostGIS version

升级到 9.4 后:

SELECT version(); ->  PostgreSQL 9.4.18 on x86_64-unknown-linux-gnu, compiled by gcc (GCC) 4.8.3 20140911 (Red Hat 4.8.3-9), 64-bit
SELECT postgis_full_version(); ->  POSTGIS="2.1.8 r13780" GEOS="3.5.0-CAPI-1.9.0 r4084" PROJ="Rel. 4.9.2, 08 September 2015" GDAL="GDAL 1.11.5, released 2016/07/01" LIBXML="2.9.1" LIBJSON="UNKNOWN" RASTER
ALTER EXTENSION postgis UPDATE; ->  Returned success, but no change to PostGIS version

升级到 9.5 后:

SELECT version(); ->  PostgreSQL 9.5.13 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.3 20140911 (Red Hat 4.8.3-9), 64-bit
SELECT postgis_full_version(); ->  POSTGIS="2.1.8 r13780" GEOS="3.5.1-CAPI-1.9.1 r4246" PROJ="Rel. 4.9.2, 08 September 2015" GDAL="GDAL 1.11.5, released 2016/07/01" LIBXML="2.9.1" LIBJSON="UNKNOWN" RASTER
ALTER EXTENSION postgis UPDATE; ->  SQL Error [XX000]: ERROR: attempt to redefine parameter "postgis.backend"

所以我在这里停留了一段时间,似乎无法成功升级 PostGIS。然后我看到post 描述了同样的错误,并决定等待 24 小时,看看 RDS 实例是否收到了补丁。似乎确实如此,尽管我没有注意到日志中的任何内容。无论如何,在我自己没有任何改变的情况下,第二天我就能够成功升级 PostGIS 扩展

ALTER EXTENSION postgis UPDATE; ->  Returned success
SELECT postgis_full_version(); ->  POSTGIS="2.2.5 r15298" GEOS="3.5.1-CAPI-1.9.1 r4246" PROJ="Rel. 4.9.3, 15 August 2016" GDAL="GDAL 2.0.3, released 2016/07/01" LIBXML="2.9.1" LIBJSON="0.12" RASTER

之后,我能够将 RDS 实例升级到 9.6

SELECT version(); ->  PostgreSQL 9.6.9 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.3 20140911 (Red Hat 4.8.3-9), 64-bit
SELECT postgis_full_version(); ->  POSTGIS="2.2.5 r15298" GEOS="3.5.1-CAPI-1.9.1 r4246" PROJ="Rel. 4.9.3, 15 August 2016" GDAL="GDAL 2.0.3, released 2016/07/01" LIBXML="2.9.1" LIBJSON="0.12" RASTER
ALTER EXTENSION postgis UPDATE; ->  Returned success
SELECT postgis_full_version(); ->  POSTGIS="2.3.7 r16523" PGSQL="96" GEOS="3.6.2-CAPI-1.10.2 4d2925d6" PROJ="Rel. 4.9.2, 08 September 2015" GDAL="GDAL 2.1.4, released 2017/06/23" LIBXML="2.9.1" LIBJSON="0.12" RASTER

我想弄清楚如何立即触发扩展的明显补丁,而不是仅仅等待它,但我还没有弄清楚。

【讨论】:

【参考方案3】:

我有同样的问题。问题是,我有超过 1 个数据库。我升级了主数据库,但忘记了其他数据库。您需要检查同一服务器中的所有数据库并使用以下命令升级每个数据库。

ALTER EXTENSION postgis UPDATE;

【讨论】:

这行得通。在其他数据库上升级 postgis 后,我只需要关闭 SQL 控制台连接并重新打开它。 谢谢,这正是我遇到的问题【参考方案4】:

错误的真正原因:尝试重新定义参数“postgis.backend” 是因为您通过调用 PostGIS_full_version( ) 函数,因此库配置无法更新到 new 版本,因为会话仍然加载了旧函数。

您需要断开与数据库的连接并连接一个新会话,然后立即调用 ALTER EXTENSION postgis UPDATE; 命令尝试使用任何 gis 函数。

任何现有连接都将引用旧函数,直到它们断开并重新连接,此时将加载新函数。

AWS RDS PostgreSQL 升级步骤完成后,您应进一步重新启动实例以完成参数组的同步。我建议您在进行 postGIS 扩展更新之前完成此操作。

您可以使用以下方法检查库的版本: 从 pg_proc 中选择不同的 probin,其中 probin 不是按 probin 和 probin 的空顺序,例如 '%postgis%';

【讨论】:

这有多相关?该问题不包含您明确提到的特定错误。您是否复制并粘贴了此答案?

以上是关于PostGIS 版本阻止了 Amazon RDS 上的 PostgreSQL 升级的主要内容,如果未能解决你的问题,请参考以下文章

在 Amazon RDS 上安装 Kmeans PostgreSQL 扩展

如何在 Amazon RDS 数据库服务器实例上运行命令“mysqladmin flush-hosts”?

Amazon RDS 免费层级数据库未针对 PostgreSQL 显示

Amazon RDS(postgres)连接限制?

设置 Amazon EC2 和 Amazon RDS

Amazon RDS 和 Elastic Beanstalk 连接