Criando um “operador de igualdade” personalizado para o tipo PostgreSQL (ponto) para chamadas DISTINCT
Em uma das minhas tabelas, tenho uma coluna definida como o tipo PostgreSQLpoint
. Eu uso isso para oearthdistance
módulo - especificamente, o<@>
operador de distância. (Sim, eu sei sobre o PostGIS, mas era muito mais complexo do que minhas necessidades, que simplesmente recebe uma tabela com pares de lat / long, ordena a tabela por distância, com espaço para erro de um lat / long fornecido.)
Contudo,point
parece não ter igualdade implementada, então qualquerDISTINCT
chamar na mesa comoSELECT DISTINCT * FROM mytable
resulta no seguinte erro:
ERROR: could not identify an equality operator for type point
Embora seja geralmente desaconselhável corrigir os tipos internos, neste caso não me importo e tentei criar meus próprios=
operador parapoint
:
CREATE OR REPLACE FUNCTION compare_points_equality(point1 POINT, point2 POINT)
RETURNS BOOLEAN AS $
SELECT point1[0] = point2[0] AND point1[1] = point1[1];
$ LANGUAGE SQL IMMUTABLE;
CREATE OPERATOR = (
LEFTARG = POINT,
RIGHTARG = POINT,
PROCEDURE = compare_points_equality,
COMMUTATOR = =,
NEGATOR = !=,
HASHES,
MERGES
);
Mas, mesmo depois de criar isso, recebo o mesmo erro. O que devo fazer para criar o "operador de igualdade", se não criar=
?