由PostGIS版本

时间:2017-03-06 20:07:47

标签: postgresql postgis amazon-rds

我正在尝试将我的RDS实例从9.5.4升级到9.6.1,并且因为有关需要首先升级的PostGIS版本的错误而被阻止。

  

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

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

  

alter extension postgis update

产量

  

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

我尝试明确升级到9.6.1中的版本

  

将扩展postgis更新更改为'2.3.0'

获得

  

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

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

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

4 个答案:

答案 0 :(得分:5)

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

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

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

首先我做了一个:

ALTER EXTENSION postgis UPDATE;

然后升级服务器

答案 1 :(得分:4)

我遇到了这个确切的问题,试图将服务器从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

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

答案 2 :(得分:2)

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

ALTER EXTENSION postgis UPDATE;

答案 3 :(得分:-1)

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

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

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

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

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