第7章 修复损坏的 PostGIS Raster 安装
修复损坏的 PostGIS Raster 安装
自 PostGIS 3.0 起,PostGIS 的 Raster 支持不再属于 postgis 扩展,而是独立拆分出来,成为一个名为 postgis_raster 的 PostGIS 扩展。将 Raster 从 2.* 升级到 3.* 的操作,涵盖了将安装从 PostGIS 2+ 升级到 PostGIS 3+ 的正确方法。不幸的是,许多人在看到 `SELECT postgis_full_extension()` 检查报告中出现“UNPACKAGED”警告时,往往因惊慌失措而尝试执行诸如 `drop raster type with cascade` 之类的操作。删除 raster 类型并不能移除所有 raster 函数,但如果你有任何 raster 数据,却会彻底摧毁它们。切勿这样做。但如果你已经不小心做了这件事,这里就提供了相应的补救方案。
一旦 Raster 安装被破坏,唯一的补救措施就是移除 PostGIS Raster 功能残留的部分。此时,你可以使用 `CREATE EXTENSION postgis_raster` 重新安装,或者如果你不需要 Raster 支持,也可以直接忽略。
如何判断你的 Raster 安装已损坏?
如果你运行:
ALTER EXTENSION postgis UPDATE;
-- 是的,运行两次 SELECT postgis_extensions_upgrade(); SELECT postgis_extensions_upgrade();
然后检查
SELECT postgis_full_version();
如果你仍然看到以下消息:
RASTER (raster lib from "2.5.3 r17699" need upgrade) [UNPACKAGED!]
说明你的 Raster 功能损坏得如此严重,以至于无法通过升级来修复。
首先,在执行任何操作之前,请确认你没有 Raster 表。 以下查询应当报错或返回 0:
SELECT count(1) FROM raster_columns;
要修复此问题,请运行脚本 `uninstall_rtpostgis.sql`。 它应该能移除甚至更旧版本的 PostGIS Raster 函数,因为旧版本的函数集通常是 2.5 版本的子集。
现在,为了确认所有残留物都已清除,再次运行以下命令。
SELECT postgis_full_version();
你此时应该看到,结果中不再提及 RASTER 或 GDAL。