[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