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

將 PostGIS 擴充功能移動到不同的綱要

從 PostGIS 2.3 開始,postgis 擴充功能已變更為不再允許重新定位。擴充功能內的所有函式呼叫現在都使用綱要限定。

雖然此變更修正了一些資料庫還原的問題,但也為已將擴充功能安裝到綱要中,但現在希望將其移動到新綱要的使用者造成了新的問題。幸運的是,有一種方法可以做到這一點。

在此練習中,我將在預設綱要中安裝 PostGIS,然後示範如何將其移動到另一個綱要位置。

您可以使用 psql 或 pgAdmin 或您想要的任何其他 PostgreSQL 工具來執行這些步驟。

大多數人的預設綱要都設定為 public,因此不明確指定安裝綱要會將 postgis 安裝在 public 綱要中。

CREATE EXTENSION postgis;

現在,讓我們建立一個新的綱要來移動它,並將此綱要新增至 search_path

CREATE SCHEMA postgis;

ALTER DATABASE mydb
 SET search_path = public,postgis;

GRANT USAGE ON SCHEMA postgis to public;

如果您執行的是 PostGIS 2.3 或更高版本,嘗試使用通常的步驟移動到不同的綱要將會失敗並出現錯誤

ALTER EXTENSION postgis
  SET SCHEMA postgis;
ERROR:  extension "postgis" does not support SET SCHEMA

若要允許移動,請執行以下步驟

-- Temporarily made postis relocatable
UPDATE pg_extension
  SET extrelocatable = true
	WHERE extname = 'postgis';

-- Relocate it
ALTER EXTENSION postgis
  SET SCHEMA postgis;

-- Force an upgrade toh a dummy version
-- For PostGIS 3.5.0+ do
ALTER EXTENSION postgis
  UPDATE TO "ANY";

-- For PostGIS 3.4 and lower use next
ALTER EXTENSION postgis
  UPDATE TO "3.4.3next";

-- Force a second upgrade to do the real upgrade
ALTER EXTENSION postgis UPDATE;

請注意使用包含 nextANY 的擴充功能版本。

為了升級到最新版本以外的版本,需要 nextANY 版本步驟,因為擴充功能系統不允許相同版本更新到相同版本。最後的升級會執行升級到最新安裝版本的工作。

在此過程中,所有函式都將重新安裝,並且腳本中的 @extschema@ 變數現在會參考新的綱要位置。

注意:如果您也安裝了 postgis_raster 和/或 postgis_sfcgal,請使用 postgis_rasterpostgis_sfcgal 重複上述相同步驟。因為這兩個擴充功能必須與 postgis 安裝在相同的綱要中才能正常運作。