将 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;
请注意使用包含 next
或 ANY
的扩展版本。
需要 next
或 ANY
版本步骤才能升级到当前版本以外的版本,因为扩展系统不允许相同版本到相同版本的更新。最终升级会完成升级到最新安装版本的工作。
在此过程中,所有函数都会使用脚本中现在引用新模式位置的 @extschema@
变量重新安装。
注意:如果您还安装了 postgis_raster 和/或 postgis_sfcgal,请使用 postgis_raster 和 postgis_sfcgal 重复上述相同步骤。因为这两个扩展除非与 postgis 安装在同一模式下,否则将无法正常工作。