Creación de un "operador de igualdad" personalizado para el tipo PostgreSQL (punto) para llamadas DISTINCT
En una de mis tablas, tengo una columna que se define como el tipo PostgreSQLpoint
. Yo uso esto para elearthdistance
módulo, específicamente, el<@>
operador a distancia. (Sí, sé sobre PostGIS, pero era mucho más complejo que mis necesidades, que simplemente se le da una tabla con pares de lat / long, ordene la tabla por distancia con espacio para el error de un lat / long proporcionado).
Sin embargo,point
parece no tener igualdad implementada, entonces cualquierDISTINCT
llamar a la mesa comoSELECT DISTINCT * FROM mytable
da como resultado el siguiente error:
ERROR: could not identify an equality operator for type point
Aunque generalmente no es aconsejable parchear los tipos incorporados, no me importa en este caso hacerlo, e intenté crear el mío.=
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
);
Pero incluso después de crear esto, me sale el mismo error. ¿Qué se supone que debo hacer para crear el "operador de igualdad"?=
?