我正在尝试将我的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提及这种情况
在升级到9.6.1之前,请确保您的实例已升级到9.5.4。
我在其中一个数据库实例上遇到了同样的错误,但它是在9.5.2上。首先我将其升级到9.5.4然后再升级到9.6.1,一切都按预期工作。
我尝试过的下一个实例已经在9.5.4上得到了相同的消息。
所以首先我做了一个:
ALTER EXTENSION postgis UPDATE;
然后升级了服务器
我遇到了这个问题,试图让服务器从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
我想弄清楚如何立即触发扩展的明显补丁而不是等待它,但我还没有弄明白。
我有同样的问题。问题是,我有超过1个数据库。我升级了主数据库,但忘记了其他人。您需要检查同一服务器中的所有数据库,并使用以下命令升级每个数据库。
ALTER EXTENSION postgis UPDATE;
错误的真正原因:尝试重新定义参数“postgis.backend”是因为您通过调用PostGIS_full_version()函数引用了旧的postGIS库,因此库配置无法更新到新版本,因为会话仍然已加载旧功能。
您需要断开与数据库的连接并连接新会话,然后立即调用ALTER EXTENSION postgis UPDATE;尝试使用任何gis函数之前的命令。
任何现有连接都将引用旧函数,直到它们断开连接并重新连接,此时将加载新函数。
完成AWS RDS PostgreSQL升级步骤后,您应该执行实例的进一步重新启动以完成参数组的同步。我建议您在执行postGIS扩展更新之前完成此操作。
您可以使用以下方法检查存在的库的版本:从pg_proc中选择不同的probin,其中probin IS not not order by probin和probin like'%postgis%';