Tupeltypen

Hi erstmal.

Bin erst frisch eingestiegen in postgreSQL. Jetzt hab ich nach überfliegen der Doku eine Frage zu benannten Tupeltypen.

Bsp.:
Ich hab einen benannten Tupeltyp:

CREATE TYPE Name_t AS (
   vname VARCHAR(30),
   nname VARCHAR(30)
);

und eine Tabelle die diesen Typ als Attribut verwendet.

CREATE TABLE Person (
   name Name_t
);

Kann man bei einer Query auf die Tabelle Person jetzt auf die beiden Attribute vname und nname getrennt zugreifen?

Also bspw wie in (Oracle, db2, Informix)

   SELECT name.vname 
   FROM Person;

Danke,
lg Georg

Sicher.

test=*# select * from person;
     name
--------------
 (vor,nach)
 (vor2,nach2)
(2 Zeilen)

Zeit: 0,318 ms
test=*# select * from person where (name).vname = 'vor';
    name
------------
 (vor,nach)
(1 Zeile)

PostgreSQL: Documentation: Manuals: PostgreSQL 8.3: Composite Types

Andreas

Genau das hab ich gebraucht.

Vielen Dank!

also ich rate dir von der verwendung dieser composite types ab …
die machen nur probleme - d.h. man kann nicht vernuenftig damit arbeiten ohne sich nen wolf zu implementieren. PG sieht keine default-operatoren fuer solche typen vor oder ein konzept, was das handling erleichtert. Sobald du ein bisschen mehr machen willst, als diese felder zu speichern oder anzuzeigen - z.B. sortieren oder suchen - wird dir PG ans Bein pinkeln - weil keine operatoren für den Typ existieren.

naja - freilich ist die idee solche typen zu verwenden - verlockend - ich konnte da auch nicht widerstehen - nur trug das wenig fruechte, weils die arbeit nicht vereinfachte - sondern erschwerte. z.B. wollte ichs an einem preis mit währung probieren … oder ne 4 stellige versionsnummer major, minor ,release, build …

vielleicht hast du ja mehr geduld als ich oder bist da leidensfähiger :slight_smile: und kannst mir nützliche tipps liefern wenn dein weg von erfolg gekrönt sein wird

@symbiont: Hab mich jetzt auch intensiver damit beschäftigt, und komme eigentlich zum selben Schluss wie du. Ich hab noch keine sinnvolle Anwendung gefunden, ausser möglicherweise Funktionen die als Rückgabewert diesen Typ haben.

EDIT: Was ich gebraucht hätte, wären PRIMARY und FOREIGN KEYs auf solche Typen zu definieren, was anscheinend nicht möglich ist.