[linux-l] SQL / PostgreSQL

Olaf Radicke olaf_rad at gmx.de
Mi Sep 20 09:41:52 CEST 2006


Am Dienstag, 19. September 2006 19:56 schrieb Olaf Radicke:
> Hi!
>
> Ich habe ein Problem...
> Wenn ich eine Datensatz in eine Tabelle einfüge, dessen einziger
> eindeutiger Schüssel ein SERIAL PRIMARY KEY ist, wie bekomme ich raus,
> unter welcher ID der Datensatz gespeichert wurde? Nachträglich danach
> suchen geht nicht, weil alle anderen Spalten mehrfach vorkommen können und
> nicht eindeutig sind. Also brauche ich gleich beim INSERT die SERIAL
> PRIMARY KEY zurück. Wie bekommt man das hin??

Lösung gefunden:

SERIAL ist eigentlich nur eine SubSelect auf eine Sequenz oder genauer eine 
Funktion mit dem Parameter einer Sequenz die einen eindeutige und einmaligen 
Inniger zurückgibt in dem bei jedem Funktionsaufruf eins höher gezählt wird: 
INT nextval('TabName_idSpalte_seq')

Wenn ich also meine ID haben will, muss ich den weg "zu Fuss" machen. Erster 
Schritt:
SELECT nextval('einschraenkung_merkmal_id_seq');
Dazu muss ich natürlich den Sequenz Namen kennen. Der setzt sich zusammen aus 
Tabellenname, Tiefstrich, Spaltenname, Tiefstrich, "seq".

Jetzt habe ich meine eindeutige ID, die mir niemand mehr wegnehmen kann. Egal 
welche Operationen auf der Tabelle in der zwischenzeit ausgeführt werden, 
wann immer ein Anderer direkt nextval() oder indirekt SERIAL aufruft, er wird 
immer eine andere ID bekommen, als ich. Auch wenn ich mir 10 Jahre Zeit lasse 
zwischen dem nextval()-Aufruf und dem INSERT-Befehl. Meine ID wird für mich 
frei sein.

MfG
Olaf




Mehr Informationen über die Mailingliste linux-l