PostGIS
切換深色淺色全自動模式 - PostGIS 空間資料庫 切換深色淺色全自動模式 - PostGIS 空間資料庫 切換深色淺色全自動模式 - PostGIS 空間資料庫 返回首頁 - PostGIS 空間資料庫

將 postgis_sfcgal 升級到 3.1 或更高版本

自 PostGIS 3.1 起,PostGIS sfcgal 支援函式庫已不再是 postgis 核心函式庫的一部分,而是轉移到新的函式庫 postgis_sfcgal-3 中。

對於使用 SFCGAL 從 PostGIS < 3.1 編譯進行一般升級或系統升級到具有 SFCGAL 的 PostGIS >= 3.1 的人員來說,這個變更並無影響,且可以使用 ALTER EXTENSION postgis_sfcgal UPDATE; 或 SELECT postgis_extensions_upgrade();。不過,如果您使用 pg_upgrade,您可能會收到錯誤訊息,例如 postgis-3 不包含函數 postgis_sfcgal_version()(它屬於 postgis_sfcgal 延伸模組)。

這個中斷的主要原因有三個:

  • 我們希望 postgis-3 函式庫具備相同的顯式函數,無論您是否使用 SFCGAL 編譯。這個變更已在 PostGIS 3.0 中規劃,但只有後端切換管線被移除,而非完整中斷。

  • 這可以使套件管理員提供 postgis_sfcgal(也許作為一個獨立套件),而不需要其他只想要 postgis 的使用者具備 boost 和 CGAL。

  • 過去,postgis_sfcgalpostgis 延伸套件連結於同一個基礎函式庫中,因為它們有一些功能的命名重疊,例如 ST_3DIntersectsST_Intersects。試著向人們解釋如何運作這些功能,讓後端切換到 sfcgal,如果他們想要擴充 3D 功能,更不用提一個在升級過程中增加一些惱人公告的 GUC 後端。因此,在未來,我們不會在兩個延伸套件間重複使用功能名稱,且函式名稱不會重疊。

選項 1

使用 pg_upgrade 升級 PostGIS < 3.1 postgis_sfcgal 時最簡單的修復方法是在執行 pg_upgrade 之前先捨棄 postgis_sfcgal 延伸套件。

這可以在不遺失資料的情況下執行,因為 postgis_sfcgal 延伸套件僅含有功能,不包含資料類型。在舊叢集中捨棄該延伸套件之後,使用下列指令:

在嘗試 pg_upgrade 之前,在舊叢集中

-- this step only needed for PostGIS < 3.1.0
DROP EXTENSION postgis_sfcgal;

如果你有檢視、SQL 函式或受約束於 postgis_sfcgal 函式的約束,上述的 DROP EXTENSION 將會失敗。在這種情況下,你可以在 pg_upgrade 執行之前放棄那些相依性,並確定你有程式碼可以重新建立。或者,你可以執行「選項 2」。

在舊叢集中捨棄延伸套件後,你可以執行 pg_upgrade

pg_upgrade 之後,接著在新叢集中重新加入延伸套件。

CREATE EXTENSION postgis_sfcgal;

如果你未在與 postgis 延伸套件相同的結構中安裝,建立延伸套件將發生錯誤。如果您收到錯誤,請明確指定您在其中安裝 postgis 的結構

CREATE EXTENSION postgis_sfcgal SCHEMA postgis;

選項 2

在舊叢集中,確認你已安裝 3.1 以上版本的 postgis 二進位檔,然後執行下列指令:

ALTER EXTENSION postgis UPDATE;
SELECT postgis_extensions_upgrade();

接著照常執行 pg_upgrade