【问题标题】:How to fix input is out of range error in Postgres 9.1如何修复 Postgres 9.1 中的输入超出范围错误
【发布时间】:2017-05-27 10:42:12
【问题描述】:

在 Postgres 9.1 中,下面的代码会产生错误

ERROR:  input is out of range
CONTEXT:  SQL function "gc_dist1" statement 1

如何在 9.1 中修复它?

create or replace function gc_dist1(_lat1 float8, _lon1 float8, _lat2 float8, _lon2 float8) 
returns float8 as $$ 
select ACOS(SIN(radians($1))*SIN(radians($3))+COS(radians($1))*COS(radians($3))*COS(radians($4)-radians($2)))*6371; 
$$ language sql immutable;

select gc_dist1(24.6269989013672,59.3357849157094,24.6269989013672,59.3357849121094);

【问题讨论】:

  • 对于地理距离计算,您可以使用 PostgreSQL 中的 earthdistance 模块 -- 或者,对于更完整的功能集:PostGIS

标签: sql postgresql plpgsql postgresql-9.1 radians


【解决方案1】:

如果因为 acos() 函数不能接受高于 1 的值而失败。 在你的例子中就是这样。

SELECT  (
        SIN(radians(24.6269989013672))
        * SIN(radians(24.6269989013672))
        + COS(radians(24.6269989013672))
        * COS(radians(24.6269989013672))
        * COS(radians(59.3357849121094)-radians(59.3357849157094))
    ) > 1 -- true

看来你的函数逻辑不对。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-30
    • 1970-01-01
    • 2021-09-17
    • 2019-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多