pg_upgrade 從 9.3.5 到 9.6 與 PostGIS (Windows)
版本
目前:
- PostgreSQL:9.3.5 64 位
- 地理資訊系統:2.2.3
- 注意: 2.2.3 是 StackBuilder 上適用於 9.3.5 的最新版本;
升級
- PostgreSQL:9.6 64 位
- 地理資訊系統:2.3.1
- 注意: 2.3.1 是 StackBuilder 上 9.6 的唯一可用版本,儘管原則上我可以從OSGEO 的安裝程序檔案中降級到存檔的 2.3.0 ,但這與我可以得到的匹配版本一樣接近(事實證明不會無論如何解決任何問題)。
DB 大小(不包括 1MB 以下的表):~230GB。不是微不足道的,但也不是“大數據”。足夠大,
pg_dump
將是一個巨大的 PITA。問題
如果我在目標(9.6)上啟用 PostGIS 擴展並
pg_upgrade
使用適當的源和目標 bin 和數據目錄執行,我會得到New Cluster database "postgres" is not empty Failure, exiting
這是因為 PostGIS 擴展
spatial_ref_sys
在安裝時會創建一個表 ( );如果不刪除副檔名,就無法刪除該表。如果我在目標 (9.6) 中禁用
pg_upgrade
PostGIS,則會失敗,因為目標缺少適當的可載入庫(提示:與 PostGIS 相關的庫)。
pg_upgrade
提供了一個花花公子的建議,即我從舊安裝中刪除使用庫的函式,這對我來說聽起來像是災難的秘訣。更新:剛剛嘗試刪除 PostGIS 功能之一(
ST_Locate_Between_Measures()
- 我從未使用過它,也不太可能)。不刪除 PostGIS 就無法完成,因為數據中的所有幾何列都有 GIST 索引,所以無法完成。我曾試圖使 PostGIS 版本在兩個 PostgreSQL 版本之間保持一致,但顯然這不可能發生 - 至少在 Windows 上不會。
我猜
我的猜測是,整個支持 PostGIS 的世界不可能以相當簡單(即非
pg_dump
)的方式更新他們的 PostgreSQL 版本。PostGIS 的人們往往非常關心事情需要多長時間(嘗試在沒有 GIST 索引的情況下對 300 萬個多邊形進行空間比較,以查看長查詢的樣子),因此有理由認為有人會想出如何快速升級。
達成目標
在最好的情況下,我會
pg_upgrade --link
,因為一旦我遷移到新版本,舊集群對我來說就死了。尾巴/inb4
為什麼有人會執行 Windows 機器來做任何需要可靠性的事情?,我聽到你問。
遺留系統(“當我到這裡的時候就是這樣,軍官”)加上慣性(機構和個人)
我這個週末要去州際公路,所以也許數據庫只需要在我離開的時候自己進行 pg_dump 。
- PostGIS 2.2 不是為 Windows 上的 PostgreSQL 9.6 建構的
- PostGIS 2.3 不是為 Windows 上的 PostgreSQL 9.3 建構的。
你有兩個選擇
我會進行硬升級。說真的,230 GB 的引入並不多。你會活下去的。(我想)。
我的猜測是,整個啟用 PostGIS 的世界不可能以相當簡單(即非 pg_dump)的方式更新他們的 PostgreSQL 版本。
他們確實有一種快速輕鬆升級的方法,但它要求伺服器具有兩個版本的 PostGIS。然後就可以跑了
ALTER EXTENSION postgis UPDATE TO "2.3.2devnext"; ALTER EXTENSION postgis_topology UPDATE TO "2.3.2devnext";
您無法使用該方法,因為我找不到為 MS Windows PostgreSQL 9.3 編譯 PostGIS 2.3 的任何人,但嚴格來說這是可能的。
如果您使用的是 Ubuntu/Debian,這不會是一個問題,因為 PostGIS 的預編譯版本已經在儲存庫中,所有版本的 PostgreSQL 也在儲存庫中。