目录
1、问题
SpringBoot工程使用postgresql的geometry类型函数ST_DISTANCE()报错,提示信息:function st_distance() does not exist
下面是sql语句:
#查询表中与给定经纬度最近的经纬度点位距离
SELECT
ST_DISTANCE(shape, 'POINT(124.24214208707231 38.34188397346135)'::GEOMETRY) AS distance
FROM
tb_gis_info
ORDER BY
distance
LIMIT 1
2、分析
发现上述sql语句可以在postgresql客户端执行,但是在SpringBoot工程的mybatis执行就会报错。同时发现mybatis不能识别任何geometry类型的属性和函数。最后定位到geometry类型是由数据库scheme为public的模式提供,但SpringBoot工程数据源配置中指定数据库的scheme不包含public。
3、解决办法
删除配置文件中数据库指定的scheme配置项
修改前的数据源url:
jdbc:postgresql://127.0.0.1:5432/mydb?currentSchema=my_app
修改后的数据源url:
jdbc:postgresql://127.0.0.1:5432/mydb