Postgresql

pg_upgrade 從 9.3.5 到 9.6 與 PostGIS (Windows)

  • January 18, 2017

版本

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_upgradePostGIS,則會失敗,因為目標缺少適當的可載入庫(提示:與 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 。

你有兩個選擇

  1. 硬升級
  2. 為 9.6 PostGIS 2.2 建構,然後進行軟升級

我會進行硬升級。說真的,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 也在儲存庫中。

引用自:https://dba.stackexchange.com/questions/161370