Erstellen eines benutzerdefinierten "Gleichheitsoperators" für den PostgreSQL-Typ (Punkt) für DISTINCT-Aufrufe

In einer meiner Tabellen habe ich eine Spalte, die als PostgreSQL-Typ definiert istpoint. Ich benutze dies für dasearthdistance -Modul - speziell das<@> Fernoperator. (Ja, ich kenne PostGIS, aber es war weitaus komplexer als meine Anforderungen, da es einfach eine Tabelle mit Lat / Long-Paaren gibt. Ordnen Sie die Tabelle nach Entfernung mit Fehlerfreiheit von einer angegebenen Lat / Long-Tabelle.)

Jedoch,point scheint keine Gleichheit implementiert zu haben, daher kannDISTINCT auf dem Tisch anrufen wieSELECT DISTINCT * FROM mytable führt zu folgendem Fehler:

ERROR: could not identify an equality operator for type point

Obwohl es im Allgemeinen nicht ratsam ist, eingebaute Typen zu patchen, macht es mir in diesem Fall nichts aus, und ich habe versucht, meine eigenen @ zu erstelle= Operator fürpoint:

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

Aber auch nachdem ich das erstellt habe, bekomme ich den gleichen Fehler. Was soll ich tun, um den "Gleichheitsoperator" zu erstellen, wenn nicht create=?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage