执行PostGIS查询报"Not an int attribute",是否为Bug?
解决思路
修复LLVM版本不匹配问题
日志明确提示LLVM生产者(15.0.6)与读取者(14.0.6)版本不一致,这是PostgreSQL JIT编译引发崩溃的核心原因。- 统一LLVM版本:将系统中的LLVM升级到15.0.6,或降级到14.0.6,确保PostgreSQL依赖的LLVM版本一致。
- 临时禁用JIT:修改
postgresql.conf配置文件,设置jit = off,重启数据库后重新执行查询验证。
规避ST_ASTEXT的性能与风险
ST_ASTEXT处理全量OSM多边形数据时效率极低,还易触发内存或编译异常。可换用更稳妥的方式:- 先筛选有效几何对象,再分批计算:
逐步扩大LIMIT范围,或采用分区查询,避免一次性加载全量数据。SELECT MIN(len) FROM ( SELECT LENGTH(ST_ASTEXT(way)) AS len FROM planet_osm_polygon WHERE ST_IsValid(way) LIMIT 10000 ) t;
- 先筛选有效几何对象,再分批计算:
检查版本兼容性
确认PostGIS与当前PostgreSQL版本是否匹配,部分版本组合在JIT编译几何函数时存在bug。尝试升级PostGIS到最新兼容版本,或回退至稳定兼容版本。排查极端数据
OSM planet数据可能存在异常几何对象(如超复杂、损坏的多边形),先抽样排查:SELECT way FROM planet_osm_polygon ORDER BY ST_NPoints(way) DESC LIMIT 10;若发现异常数据,清理或跳过这类数据后再执行查询。
内容的提问来源于stack exchange,提问作者Grim
相关产品推荐
相关产品推荐

