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:
PostgreSQL: Documentation: 8.1: Examples bzw.
PostgreSQL: Documentation: 8.1: GiST Indexes
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 ]
)