從 2.* 升級到 3.* 的光柵
從 PostGIS 3.0 開始,PostGIS 光柵支援不再是 postgis
的擴充功能,而是獨立出來成為新的 PostGIS 擴充功能,稱為 postgis_raster
。
造成此次變更的兩個主要原因如下:
-
PostGIS 中的光柵功能過於龐大,包含超過 150 個函數和數種類型。對於不使用光柵的人來說,這些額外的函數造成困擾。
-
光柵 gdal 依賴關係非常龐大,許多人希望在沒有大型光柵依賴關係的情況下使用 postgis 擴充功能。
雖然重新包裝光柵為自己的擴充功能解決了許多問題,但這也代表從 PostGIS 2.something 升級到 3.something 的過程會稍微複雜一點,即使是有經驗的 PostGIS 使用者也有可能搞砸。
我將詳細說明如何正確地從 PostGIS 2.* 安裝升級到 PostGIS 3.* 安裝的 PostGIS 光柵。
您可以使用 psql 或 pgAdmin 或任何其他您想要的 PostgreSQL 工具執行這些步驟。
不論您使用 PostGIS 的哪個版本,您都應該先安裝 PostGIS 3.* 二進位檔。
-- this step only needed for PostGIS < 2.5.4
ALTER EXTENSION postgis UPDATE;
-- Do for all PostGIS 2.*
SELECT postgis_extensions_upgrade();
SELECT postgis_extensions_upgrade();
如果您不需要光柵支援,而且目前沒有包含光柵的表格,您可以按以下方式移除擴充功能:
DROP EXTENSION postgis_raster;
因此您可能想知道,執行兩次的奇怪之處:
SELECT postgis_extensions_upgrade();
這是因為第一次執行從 postgis
擴充功能中解除光柵支援,使其成為包含函數和類型的鬆散包袱。
第二個呼叫會將鬆散的位元重新組合為新的擴充套件 postgis_raster
。遺憾的是,我們無法使用單一函式呼叫來執行此任務。我忘記原因了。有些類似於擴充套件升級/安裝無法在同一個交易中產生新的擴充套件。
於 PostgreSQL 13 中,PostgreSQL 移除了對 CREATE EXTENSION ... FROM unpackaged
的支援,這增加了某些複雜性。因此,您要在升級到 PostgreSQL 13 以上版本之前,嘗試升級到 PostGIS 3.*,且您絕對應該在嘗試升級到 PostgreSQL 13 以上版本之前,改用 PostGIS 擴充套件而非安裝腳本。