PostgreSQL中earthdistance模块提示函数不存在如何解决
问题根因
SHOW rds.extensions返回列表包含earthdistance,仅代表Amazon RDS平台支持该扩展的安装,不代表扩展已经在你当前连接的数据库中启用。PostgreSQL的扩展是数据库级别的对象,必须手动在目标业务库执行安装操作后,才能使用扩展提供的函数。
另外earthdistance模块强依赖cube扩展,必须先安装cube才能正常安装使用earthdistance。
操作步骤
- 使用有rds_superuser权限的账号连接到你需要使用地理计算功能的目标数据库,依次执行以下SQL安装扩展:
-- 先安装依赖的cube扩展 CREATE EXTENSION IF NOT EXISTS cube; -- 再安装earthdistance扩展 CREATE EXTENSION IF NOT EXISTS earthdistance;
- 验证安装结果:
执行\dx命令查看当前库已安装扩展,确认cube和earthdistance都在列表中即可。
额外注意事项
- 如果你有多个业务库需要用到earthdistance的函数,需要在每个库单独执行上述安装命令,扩展不会跨库生效。
- 你之前遇到的
function xxx(numeric, numeric) does not exist报错,即使装完扩展也可能触发:因为earthdistance提供的ll_to_earth、earth_distance函数入参要求是double precision(float8)类型,如果你传入的参数被解析为numeric类型(比如显式定义为numeric的字段、未做类型转换的数值字面量),就会报函数不存在,此时只需要给参数做显式类型转换即可,示例:
select earth_distance(ll_to_earth(42.1::float8, 19.1::float8), ll_to_earth(42.2::float8, 19.2::float8));
内容的提问来源于stack exchange,提问作者Mike Baranczak
相关产品推荐
相关产品推荐

