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

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 (下载源代码、配置、制作、安装,然后ALTER EXTENSION postgis UPGRADE TO '2.2.0';)。这似乎已经起作用了 (在安装了 postgis 的两个数据库上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-2.1.so留在了 lib 目录中。
  3. 我尝试将 Postgresql 从 9.4.5 升级到 9.5beta2。我下载源代码、配置、制作、安装、安装 Postgis 2.2.0、initdb,然后准备运行pg_upgradepg_upgrade失败并显示:

您的安装引用了新安装中缺少的可加载库。您可以将这些库添加到新安装中,或者从旧安装中删除使用它们的函数。问题库的列表位于以下文件中: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.so文件rtpostgis-2.1.so,但错误仍然存​​在。

我也尝试根据 Postgresql 9.5beta2 编译 Postgis 2.1.6,但编译失败并出现以下错误:

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;

我还尝试将 2.1 库从 9.4 目录复制到 9.5 目录,但由于 Postgresql 版本不匹配而失败。

转储并重新加载所有数据库是可能的,但只能作为最后的手段,因为数据库非常庞大。如果答案是“因为 9.5 仍处于测试阶段”,我可以接受,尽管他们的测试版在过去似乎非常稳定。

答案1

我按照以下步骤成功解决了我的问题:

  1. 下载 2.1.6 版本源代码并应用找到的补丁这里
  2. Postgis 2.1.6 现在将与 Postgresql 9.5beta2 一起编译。编译并安装。
  3. pg_upgrade 现在可以工作了,安装了旧版本的 Postgis。

我认为这不是理想的情况,但至少它现在可以运行。

相关内容