Postgresql

postgis 2.1.6 -> 2.2.0 升級後無法升級 postgresql 9.4 -> 9.5beta2

  • December 14, 2015

這是我的情況:

  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()的留在 lib 目錄中。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
  3. 我嘗試將 Postgresql 從 9.4.5 升級到 9.5beta2。我下載原始碼、配置、製作、安裝、安裝 Postgis 2.2.0、initdb,然後準備執行pg_upgrade. pg_upgrade失敗:

您的安裝引用了新安裝中缺少的可載入庫。您可以將這些庫添加到新安裝中,或從舊安裝中刪除使用它們的功能。問題庫列表在文件中:loadable_libraries.txt

loadable_libraries.txt 包含:

無法載入庫“ $ libdir/rtpostgis-2.1" ERROR: could not access file " $ libdir/rtpostgis-2.1": 沒有這樣的文件或目錄

無法載入庫“ $ libdir/postgis-2.1" ERROR: could not access file " $ 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. 將源下載到 2.1.6 並應用此處找到的更新檔
  2. Postgis 2.1.6 現在將與 Postgresql 9.5beta2 一起編譯。編譯安裝。
  3. pg_upgrade 現在可以工作了,安裝了舊版本的 Postgis。

我不認為這是一個理想的情況,但至少現在可以執行。

引用自:https://serverfault.com/questions/742539