ST_SubDivide带grid_size参数报错需GEOS3.9+但版本符合问题咨询
问题根因
- 编译与运行时GEOS版本不一致:你参考的源码中版本校验逻辑是编译期宏判断,不会读取运行时实际加载的GEOS版本。如果PostGIS编译时依赖的GEOS版本低于3.9,后续仅升级运行时的GEOS动态库、未重新编译PostGIS,编译期硬编码的校验逻辑仍然会判定版本不满足要求,就会触发该报错。此时
SELECT PostGIS_GEOS_Version();返回的是运行时实际加载的GEOS版本,和编译期记录的版本无关,因此会出现版本符合要求但仍报错的矛盾情况。 - GEOS 3.9.0 本身存在兼容性缺陷:部分PostGIS版本的校验逻辑实际要求GEOS >= 3.9.1,因为GEOS 3.9.0的固定精度相交接口存在已知bug,无法正常支持
grid_size参数相关的计算逻辑,即使版本号显示为3.9.0仍会触发校验报错。 - GEOS库加载优先级冲突:如果系统中安装了多个版本的GEOS库,PostgreSQL服务运行用户的动态库加载路径(如
LD_LIBRARY_PATH、ld.so.conf配置)优先指向了低于3.9版本的GEOS库,仅局部环境的GEOS版本为3.9.0,也会出现该报错。
对应解决方法
- 重新编译PostGIS,编译时指定已安装的GEOS 3.9+版本的头文件与库文件路径,保证编译期与运行时的GEOS版本一致
- 升级GEOS到3.9.1及以上稳定版本,避免3.9.0的兼容性bug
- 执行
ldconfig更新系统动态库缓存,检查PostgreSQL运行用户的动态库加载路径,确保优先加载高版本GEOS库
内容的提问来源于stack exchange,提问作者fresser
相关产品推荐
相关产品推荐

