select distinct mit Datentyp point

Fragen und Probleme rund um die Abfragespache SQL.
Antworten
rainerk
Neuer Benutzer
Beiträge: 3
Registriert: Do 9. Nov 2006, 09:26

select distinct mit Datentyp point

Beitrag von rainerk »

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

akretschmer
Erfahrener Benutzer
Beiträge: 7714
Registriert: So 29. Okt 2006, 13:35
Wohnort: Kaufbach, Sachsen, Germany, Germany
Kontaktdaten:

Beitrag von akretschmer »

rainerk hat geschrieben: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;

rainerk
Neuer Benutzer
Beiträge: 3
Registriert: Do 9. Nov 2006, 09:26

Beitrag von rainerk »

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.

akretschmer
Erfahrener Benutzer
Beiträge: 7714
Registriert: So 29. Okt 2006, 13:35
Wohnort: Kaufbach, Sachsen, Germany, Germany
Kontaktdaten:

Beitrag von akretschmer »

rainerk hat geschrieben: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

rainerk
Neuer Benutzer
Beiträge: 3
Registriert: Do 9. Nov 2006, 09:26

Beitrag von rainerk »

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?

akretschmer
Erfahrener Benutzer
Beiträge: 7714
Registriert: So 29. Okt 2006, 13:35
Wohnort: Kaufbach, Sachsen, Germany, Germany
Kontaktdaten:

Beitrag von akretschmer »

rainerk hat geschrieben: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

Antworten