postgis 2.1.6 -> 2.2.0 升級後無法升級 postgresql 9.4 -> 9.5beta2
這是我的情況:
- 我從 Postgresql 9.4.5 和 Postgis 2.1.6 開始。一切執行順利。兩者都是從原始碼安裝的。
- 我將 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
- 我嘗試將 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 仍處於測試階段”,我可以接受,儘管他們的測試版本在過去似乎相當穩定。
我設法通過以下步驟解決了我的問題:
- 將源下載到 2.1.6 並應用此處找到的更新檔
- Postgis 2.1.6 現在將與 Postgresql 9.5beta2 一起編譯。編譯安裝。
- pg_upgrade 現在可以工作了,安裝了舊版本的 Postgis。
我不認為這是一個理想的情況,但至少現在可以執行。