postgis 2.1.6 – > 2.2.0升级后无法升级postgresql 9.4 – > 9.5beta2

这是我的情况:

  1. 我从Postgresql 9.4.5和Postgis 2.1.6开始。 一切顺利。 两者都是从源代码安装的。
  2. 我把Postgis升级到2.2.0(下载源代码,configuration,make,make install,然后把ALTER EXTENSION postgis UPGRADE TO '2.2.0'; )。 这似乎已经工作( select postgis_full_version()显示POSTGIS="2.2.0 r14208" GEOS="3.5.0-CAPI-1.9.0 r4084" PROJ="Rel. 4.9.1, 04 March 2015" GDAL="GDAL 2.0.1, released 2015/09/15" LIBXML="2.9.3" LIBJSON="0.11" RASTER在安装了postgis的两个数据库上),尽pipe旧的postgis-2.1.so留在了lib目录中。
  3. 我试图将Postgresql从9.4.5升级到9.5beta2。 我下载源代码,configuration,制作,安装,安装Postgis 2.2.0,initdb,准备运行pg_upgradepg_upgrade失败:

您的安装引用了新安装中缺less的可加载库。 您可以将这些库添加到新安装中,或从旧安装中删除使用它们的function。 问题库列表位于文件中:loadable_libraries.txt

loadable_libraries.txt包含:

无法加载库“$ libdir / rtpostgis-2.1”错误:无法访问文件“$ libdir / rtpostgis-2.1”:没有这样的文件或目录

无法加载库“$ libdir / postgis-2.1”错误:无法访问文件“$ libdir / postgis-2.1”:没有这样的文件或目录

我不确定为什么新版本的Postgresql需要版本的Postgis …不应该删除它? 我从9.4的lib目录中移动了旧的postgis-2.1.sortpostgis-2.1.so文件,但是错误依然存在。

我也试着编译Postgis 2.1.6对Postgresql 9.5beta2,但编译失败,出现以下错误:

lwgeom_accum.c: In function 'pgis_geometry_accum_transfn': lwgeom_accum.c:109:46: error: 'AggState {aka struct AggState}' has no member named 'aggcontext' aggcontext = ((AggState *) fcinfo->context)->aggcontext;

我也尝试从9.4目录拷贝2.1库到9.5目录,但是因为Postgresql版本不匹配而失败了。

转储和重新加载所有数据库是可能的,但只是作为最后的手段,因为数据库是巨大的。 如果答案是“因为9.5还在testing阶段”,我可以接受,虽然他们的beta在过去似乎相当稳定。

我设法通过以下步骤解决我的问题:

  1. 将源代码下载到2.1.6,并应用此处find的修补程序
  2. Postgis 2.1.6现在将用Postgresql 9.5beta2进行编译。 编译并安装。
  3. pg_upgrade现在可以运行,安装旧版本的Postgis。

我不认为这是一个理想的情况,但至less现在运行。