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"?=?

Respuestas a la pregunta(1)

Su respuesta a la pregunta