select distinct mit Datentyp point

Hallo,

ich habe folgende Tabelle:

CREATE TABLE ttable
{
z integer,
pos point
}
WITH OIDS;

Meine SQL-Abfrage lautet: “SELECT DISTINCT * from ttable;”.

Beim Ausführen erhalte ich folgende Fehlermeldung:

ERROR: could not identify an ordering operator for type point
TIP: use an explicit ordering operator or modify the query

Was kann ich tun, wenn ich die Abfrage nicht ändern möchte?

mfg
Rainer

Dein CREATE-Statement wirft einen Syntaxfehler.


Ansonsten brauchst Du halt das, was in der Fehlermeldung genannt ist. Aber vielleicht reicht Di ja auch schon dies:

SELECT DISTINCT on (z) * from ttable;

Sorry, das ist natürlich nur ein Ausschnitt aus einer längeren Tabelle und muß natürlich int4 als Datentyp für z heißen und runde Klammern().

Ich möchte aber auch nicht die Werte für z sondern für den Datentyp point haben, also

SELECT DISTINCT on (pos) * from ttable;

Das wirft den gleichen Fehler.

Einen Index habe ich übrigens auch nicht auf diese Spalte legen können.

Du wirst Dich mit GiST beschäftigen müssen. Als Einstieg:
http://www.postgresql.org/docs/8.1/interactive/gist-examples.html bzw.
http://www.postgresql.org/docs/8.1/interactive/gist.html

Hat denn jemand schon mal eine operator class für den Datentyp point programmiert?
Geht dies nur mit C-Routinen, also Änderungen an der DB-Engine?

Oach, ich denk schon, daß das schon mal einer gemacht hat ;-), ich noch nicht.

Ach ja:

CREATE OPERATOR name (
PROCEDURE = funcname
[, LEFTARG = lefttype ] [, RIGHTARG = righttype ]
[, COMMUTATOR = com_op ] [, NEGATOR = neg_op ]
[, RESTRICT = res_proc ] [, JOIN = join_proc ]
[, HASHES ] [, MERGES ]
[, SORT1 = left_sort_op ] [, SORT2 = right_sort_op ]
[, LTCMP = less_than_op ] [, GTCMP = greater_than_op ]
)

http://www.postgresql.org/docs/8.1/interactive/xoper.html