进阶 postgis.net 2026-10-09 21:31:24 · 0 阅读

第9章 PostGIS Raster 从 2.* 升级到 3.* 指南

Upgrading raster from 2.* to 3.* 从 PostGIS 3.0 开始,PostGIS 的 Raster 支持不再作为 PostGIS 扩展的一部分,而是被独立拆分为一个新的 PostGIS 扩展,名为 postgis_raster。 这次拆分主要基于两个原因:

PostGIS 的 Raster 功能非常庞大,包含超过 150 个函数和多种类型。对于不需要 Raster 功能的人,遍历这些额外的函数往往令人感到沮丧。

Raster 对 GDAL 的依赖非常庞大,许多人希望能够在没有这个庞大的 Raster 依赖的情况下使用 PostGIS 扩展。

将 Raster 重新打包为独立扩展解决了许多投诉,但从 PostGIS 2.x 升级到 3.x 的过程变得更加复杂,即便是经验丰富的 PostGIS 用户也可能会在这个过程中出错。 我将详细介绍如何正确地从 PostGIS 2.* 安装环境升级到 3.* 安装环境,特别是关于 PostGIS Raster 的升级。 你可以使用 psql、pgAdmin 或任何其他你喜欢的 PostgreSQL 工具来执行这些步骤。 无论您当前使用的是哪个版本的 PostGIS,都应该首先安装 PostGIS 3.* 的二进制文件。 -- 此步骤仅针对 PostGIS < 2.5.4 ALTER EXTENSION postgis UPDATE;

-- 针对所有 PostGIS 2.* 版本 SELECT postgis_extensions_upgrade(); SELECT postgis_extensions_upgrade(); 如果您不需要 Raster 支持,并且当前没有包含 Raster 的表,可以按以下方式删除该扩展: DROP EXTENSION postgis_raster; 您可能会好奇,为什么要运行两次: SELECT postgis_extensions_upgrade(); 这是因为,第一次运行时,它将 Raster 支持从 PostGIS 扩展中解绑,使其变成一组零散的功能和类型。 第二次调用则将这些零散的部分重新打包成一个名为 postgis_raster 的新扩展。遗憾的是,我们无法通过单次函数调用完成这一壮举。 我已经记不清具体原因了。大概是因为扩展的升级或安装无法在同一事务中创建一个新的扩展。 在 PostgreSQL 13 中,PostgreSQL 移除了对 CREATE EXTENSION ... FROM unpackaged 的支持,这带来了一些复杂情况。因此,建议在升级到 PostgreSQL 13 或更高版本之前,先尝试升级到 PostGIS 3.*。在尝试升级 PostgreSQL 13 及以上版本之前,您绝对应该从使用安装脚本切换到使用 PostGIS 扩展。

评论 (0)