Создание собственного «оператора равенства» для типа (точки) PostgreSQL для вызовов DISTINCT

В одной из моих таблиц у меня есть столбец, который определен как тип PostgreSQLpoint, Я использую это дляearthdistance модуль - в частности,<@> оператор на расстоянии. (Да, я знаю о PostGIS, но это было намного сложнее, чем мои потребности, поскольку просто указывается таблица с широтой / длинной парой, упорядочивайте таблицу по расстоянию с местом для ошибки из предоставленной широты / длины.)

Тем не мение,point кажется, не реализовано равенство, поэтому любойDISTINCT звонить на стол какSELECT DISTINCT * FROM mytable приводит к следующей ошибке:

ERROR: could not identify an equality operator for type point

Хотя обычно нецелесообразно исправлять встроенные типы, я не против в этом случае сделать это, и я попытался создать свой собственный= оператор дляpoint:

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
);

Но даже после создания этого я получаю ту же ошибку. Что я должен сделать, чтобы создать «оператор равенства», если не создать=?

Ответы на вопрос(1)

Ваш ответ на вопрос