You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostGIS ST_Distance(geography)始终返回0问题求助

PostgreSQL 16 + PostGIS 3 升级后 ST_Distance(geography) 返回0.0 排查方案
  • 检查PostGIS依赖库版本一致性

    • 执行以下命令查看系统中PROJ、GDAL的版本,对比全新Ubuntu 20.04环境的对应版本:
      proj
      gdalinfo --version
      
    • 登录PostgreSQL 16集群,查询加载的PROJ库路径,确认是否为系统正确版本:
      SELECT * FROM pg_libraries WHERE lower(filename) LIKE '%proj%';
      
  • 验证geography类型的空间参考有效性

    • 使用明确指定SRID的测试语句,确认是否返回正确结果:
      SELECT ST_Distance(
        ST_GeographyFromText('SRID=4326;POINT(116.39723 39.9075)'),
        ST_GeographyFromText('SRID=4326;POINT(121.4737 31.2304)')
      );
      
    • 检查spatial_ref_sys表中关键SRID(如4326)的定义是否完整,对比全新环境的该表数据:
      SELECT * FROM spatial_ref_sys WHERE srid=4326;
      
  • 重新安装PostGIS扩展(彻底清理后重建)

    • 在目标数据库中彻底删除并重新创建PostGIS扩展:
      DROP EXTENSION IF EXISTS postgis CASCADE;
      CREATE EXTENSION postgis;
      
    • 查看PostGIS完整版本信息,确认组件无缺失:
      SELECT postgis_full_version();
      
  • 排查PostgreSQL配置文件问题

    • 对比PostgreSQL 13和16集群的postgresql.conf,重点检查:
      • shared_preload_libraries是否包含postgis
      • dynamic_library_path是否正确指向PostGIS 3的库路径
    • 重启PostgreSQL 16服务确保配置生效:
      systemctl restart postgresql@16-main.service
      
  • 测试底层PROJ库功能

    • 使用PROJ命令行工具测试坐标转换,确认库本身功能正常:
      echo '116.39723 39.9075' | proj +proj=latlong +datum=WGS84 +to +proj=merc +datum=WGS84
      
  • 检查系统库缓存

    • 确认系统加载的是正确版本的PROJ、GDAL库:
      ldconfig -p | grep proj
      ldconfig -p | grep gdal
      
    • 若发现旧版本库被优先加载,可调整/etc/ld.so.conf.d/下的配置文件,更新缓存后重启服务:
      ldconfig
      systemctl restart postgresql@16-main.service
      

内容的提问来源于stack exchange,提问作者PaDi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 07:48:35