内容提要
PostGIS 3.7.0rc2发布,需配合PostgreSQL 19 Beta 3及GEOS 3.15使用,支持PostgreSQL 14-19。此候选版修复了3.7.0rc1的缺陷,并引入多项新功能,如ST_MinimumSpanningTree、ST_CatmullSmoothing等,同时移除对旧版PostgreSQL和GEOS的支持,并优化了性能与文档。
延伸解读
版本兼容性提醒
PostGIS 3.7.0rc2要求PostgreSQL 14至19beta3,并移除对PostgreSQL 12和13的支持。同时,GEOS最低版本提升至3.10,若需使用全部新功能则需GEOS 3.15+。升级前请确认数据库和依赖库版本,避免兼容性问题。
破坏性变更需注意
此候选版包含多项破坏性变更:拓扑构建函数中容差0的含义改变,需使用-1表示“使用拓扑精度”;ST_GeoHash的往返行为调整;address_standardizer和tiger_geocoder扩展被移除并移至独立仓库;ST_MemCollect聚合函数被移除。升级后相关功能可能需调整用法。
新功能亮点
新增ST_MinimumSpanningTree窗口函数用于计算最小生成树,ST_CatmullSmoothing平滑曲线但保留原始顶点,ST_MakeLine支持MultiLineString,以及ST_XSize等维度辅助函数。这些功能扩展了空间分析和几何处理能力,适合复杂空间数据操作。
性能与稳定性优化
通过使用GEOSPreparedDistance和缓存加速ST_DWithin,优化GiST索引处理拓扑重复边细分,并利用LTO编译优化ST_Collect聚合延迟。此外,修复了多个资源耗尽和越界读取问题,提升了解析器和空间索引的健壮性。
Q&A
PostGIS 3.7.0rc2 需要哪些版本的 PostgreSQL 和 GEOS?
PostGIS 3.7.0rc2 需要 PostgreSQL 14 到 19 beta3,以及 GEOS 3.10 或更高版本。要使用所有功能,建议使用 GEOS 3.15 或更高版本。
PostGIS 3.7.0rc2 相比 3.7.0rc1 有哪些改进?
3.7.0rc2 是 3.7.0 的第二个候选版本,主要修复了 3.7.0rc1 中的缺陷,并包含自 3.6.4 以来的错误修复和新功能。
PostGIS 3.7.0rc2 新增了哪些主要功能?
新增功能包括:ST_MinimumSpanningTree(最小生成树窗口函数)、ST_CatmullSmoothing(平滑曲线但保留原始顶点)、ST_3DInterpolatePoint(三维插值)、ST_MakePolygon 支持曲线环、ST_XSize/ST_YSize/ST_ZSize/ST_MSize 维度辅助函数、ST_CoverageEdges(返回多边形覆盖的共享边)、以及支持 MultiLineString 的 ST_MakeLine 等。
PostGIS 3.7.0rc2 有哪些破坏性变更?
破坏性变更包括:移除对 PostgreSQL 12 和 13 的支持;移除对 GEOS 小于 3.10 的支持;移除 ST_MemCollect 聚合函数;address_standardizer 和 tiger_geocoder 扩展被移至独立仓库;拓扑构建函数对容差参数的解释改变(0 表示真正的 0,-1 表示使用拓扑精度);CG_AlphaShape 现在返回 MultiPolygon;文档构建需要 Python 3 和 SVG 光栅化器。
如何从 PostGIS 2.x 升级到 3.7.0rc2?
对于 PostGIS 2 系列,需要先执行 ALTER EXTENSION postgis UPDATE; 然后执行 SELECT postgis_extensions_upgrade(); 对于 PostGIS 3 系列,直接执行 SELECT postgis_extensions_upgrade(); 即可升级所有 PostGIS 扩展。
PostGIS 3.7.0rc2 对加载器(shp2pgsql 和 raster2pgsql)做了哪些改进?
加载器参数被重新设计:shp2pgsql 可以创建 UNLOGGED 表并选择要素 ID 列名,支持 --drop-table 在输出前发出 DROP TABLE,raster2pgsql 和 shp2pgsql 都支持长选项别名,并且 -if-not-exists 使创建操作幂等。
PostGIS 3.7.0rc2 在性能方面有哪些优化?
性能优化包括:使用 GEOSPreparedDistance 和缓存加速 ST_DWithin;通过 -fno-semantic-interposition 构建扩展模块,减少 ST_Collect 聚合延迟约 4%;优化拓扑中重复边细分的 GiST 索引;允许编译器检测并行性(-flto=auto)。