39. 軟體升級

由於 PostGIS 駐留在 PostgreSQL 中,每個 PostGIS 安裝實際上包含兩個版本的軟體:PostgreSQL 版本和 PostGIS 版本。一般而言,每個 PostGIS 版本理論上可以在多個 PostgreSQL 版本中執行,反之亦然。

實際上,可用的確切版本組合將由建置 PostgreSQL 發行版的封裝人員決定。大多數 Linux 套件為每個 PostgreSQL 版本發行版包含幾個 PostGIS 版本,允許根據您的偏好,獨立或同時升級各個部分。

升級可以從升級每個組件的角度來考量。

39.1. 升級 PostgreSQL

PostgreSQL 升級有兩種情況

  • 當軟體版本在「修補程式」層級增加時,為「小升級」。例如,從 8.4.3 到 8.4.4,或從 9.0.1 到 9.0.3。增加一個以上的修補程式版本也沒問題。小升級修復錯誤,但不會新增任何新功能或變更行為。

  • 當「主要」或「次要」版本增加時,為「大升級」。例如,從 8.4.5 到 9.0.0,或從 9.0.5 到 9.1.1。大升級會新增新功能並變更行為。

39.1.1. PostgreSQL 小升級

對於「小升級」,不需要特殊程序。只需安裝新軟體,然後重新啟動伺服器即可。

39.1.2. PostgreSQL 大升級

對於「大升級」,有兩種方式可以執行升級。

39.1.2.1. 傾印/還原

傾印和還原涉及將所有資料轉換為傾印時的平台中性格式(文字表示),並在還原時轉換回原生表示,因此可能很耗時且需要大量 CPU。但是,如果您要遷移到新的架構或作業系統,這是必要的程序。這也是經過時間考驗且廣為人知的升級路徑,因此如果您的資料庫不是太大,沒有理由不堅持使用它。

  • 從舊資料庫傾印您的資料 pg_dumpall

  • 安裝新版本的 PostgreSQL 以及您在舊資料庫中使用的相同版本 PostGIS。您需要符合 PostGIS 版本,以便傾印檔案函數定義參考預期的 PostGIS 程式庫版本。

  • 使用來自新軟體的 initdb 程式初始化新的資料區域。

  • 在新資料區域上啟動新的伺服器。

  • 使用 pg_restore 還原傾印檔案。

39.1.2.2. pg_upgrade

pg_upgrade 公用程式允許升級 PostgreSQL 資料目錄,而無需傾印/還原步驟。該公用程式無法處理資料檔案本身的變更,但可以處理 PostgreSQL 主要升級中更常見且頻繁的系統資料表變更。

注意

執行升級過程的完整說明位於 PostgreSQL 網站的 pg_upgrade 網頁中。

pg_upgrade 程式預期可以存取其正在使用的兩個 PostgreSQL 版本,舊版本和新版本,因此您必須同時安裝這兩個版本。

  • 安裝您將使用的新版本 PostgreSQL。

  • 將您在舊 PostgreSQL 中使用的相同版本 PostGIS 安裝到新的 PostgreSQL 中。

  • 使用新副本的 initdb 初始化新的 PostgreSQL 資料區域。

  • 確保舊的和新的 PostgreSQL 伺服器都已關閉。

  • 執行 pg_upgrade,確保使用來自新軟體安裝的二進位檔。

    pg_upgrade
      --old-datadir "/var/lib/postgres/12/data"
      --new-datadir "/var/lib/postgres/13/data"
      --old-bindir "/usr/pgsql/12/bin"
      --new-bindir "/usr/pgsql/13/bin"
    
  • 如果 pg_upgrade 產生任何 .sql 檔案,請立即執行它們。

  • 啟動新的伺服器。

39.2. 升級 PostGIS

PostGIS 通過 EXTENSION 機制處理次要升級和升級。如果您使用 CREATE EXTENSION postgis 啟用了資料庫的空間功能,您可以使用相同的功能來更新您的資料庫。

首先,安裝新的軟體,使其可供資料庫使用。

然後,執行 SQL 以升級您的 PostGIS 擴充功能。

-- If you are upgrading from PostGIS 2.5 or later
-- and want the latest installed version
SELECT postgis_extensions_upgrade();

-- If you are upgrading from an earlier version
-- you have to specifically turn on the version you want
ALTER EXTENSION postgis UPDATE TO '2.5.5';