将栅格从 2.* 升级到 3.*
从 PostGIS 3.0 开始,PostGIS 栅格支持不再是 postgis
扩展的一部分,而是分离到一个新的 PostGIS 扩展中,称为 postgis_raster
。
造成这种中断的两个主要原因是
-
PostGIS 中的栅格功能很庞大,包含超过 150 个函数和多种类型。对于那些不需要栅格的人来说,浏览这些额外的函数会让他们感到沮丧。
-
栅格 gdal 依赖关系非常大,许多人梦想拥有没有大栅格依赖关系的 postgis 扩展。
虽然将栅格重新打包为其自己的扩展解决了众多投诉,但这意味着从 PostGIS 2.something 升级到 3.something 的过程稍微复杂了一些,即使是经验丰富的 PostGIS 用户也可能搞砸。
我将详细说明从 PostGIS 2.* 安装升级到 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 扩展而不是安装脚本。