postgres - 错误:运算符不存在

cin*_*122 5 postgresql postgis

同样,我有一个在本地运行良好的函数,但将它移到网上会产生一个很大的错误......从有人指出我传递的参数数量不准确的回应中得到提示,我加倍 -在这种情况下检查以确保我将 5 个参数传递给函数本身......

Query failed: ERROR: operator does not exist: point <@> point HINT: No operator matches the given name and argument type(s). You may need to add explicit type casts.
Run Code Online (Sandbox Code Playgroud)

查询是这样的:

BEGIN; SELECT zip_proximity_sum('zc',                                                                                                                                                                  
    (SELECT g.lat FROM geocoded g                                                                                                                                                                              
    LEFT JOIN masterfile m ON g.recordid = m.id                                                                                                                                                                
    WHERE m.zip = '10050' ORDER BY m.id LIMIT 1),                                                                                                                                                             
    (SELECT g.lon FROM geocoded g                                                                                                                                                                              
    LEFT JOIN masterfile m ON g.recordid = m.id                                                                                                                                                                
    WHERE m.zip = '10050' ORDER BY m.id LIMIT 1),                                                                                                                                                             
    (SELECT m.zip FROM geocoded g                                                                                                                                                                              
    LEFT JOIN masterfile m ON g.recordid = m.id                                                                                                                                                                
    WHERE m.zip = '10050' ORDER BY m.id LIMIT 1)                                                                                                                                                              
    ,10);
Run Code Online (Sandbox Code Playgroud)

PG 函数是这样的:

CREATE OR REPLACE FUNCTION zip_proximity_sum(refcursor, numeric, numeric, character, numeric)
  RETURNS refcursor AS
$BODY$ 
    BEGIN 

        OPEN $1 FOR 
            SELECT r.zip, point($2,$3) <@> point(g.lat, g.lon) AS distance
            FROM
            geocoded g LEFT JOIN masterfile r ON g.recordid = r.id 
            WHERE (geo_distance( point($2,$3),point(g.lat,g.lon)) < $5)
            ORDER BY r.zip, distance;
        RETURN $1; 
    END; 
    $BODY$
  LANGUAGE 'plpgsql' VOLATILE
  COST 100;
Run Code Online (Sandbox Code Playgroud)

Ste*_*ber 9

以下是确切的命令:

create extension cube;
create extension earthdistance;
select (point(-0.1277,51.5073) <@> point(-74.006,40.7144)) as distance;

     distance     
------------------
 3461.10547602474
(1 row)
Run Code Online (Sandbox Code Playgroud)

请注意,这points是使用LONGITUDE FIRST创建的。根据文档

点被视为(经度,纬度),反之亦然,因为经度更接近于 x 轴和纬度到 y 轴的直观想法。

这是可怕的设计......但它就是这样。


Unr*_*son 1

您确定在线服务器上正确安装了 postgis 吗?