SQL: Vom System vergebenen autoincrement Wert erfragen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
hupfdule
Beiträge: 1864
Registriert: 09.12.2002 15:04:37
Wohnort: Berlin
Kontaktdaten:

SQL: Vom System vergebenen autoincrement Wert erfragen

Beitrag von hupfdule » 05.07.2005 16:46:19

Hi,

bin mir nicht sicher, obs hier rein passt, aber in anderen Foren wohl noch weniger.

Folgendes Problem. Ich habe eine Tabelle in einer DB (PostgreSQL), davon eine Spalte als SERIAL definiert, also ein autoinkrement. Mein Problem ist nun, wenn ich in diese Tabelle einen Eintrag mache, wie bekomme ich heraus, welcher Wert für die SERIAL Spalte vergeben wurde? Was ist dafür die sinnvollste Herangehensweise. Es geht mir nicht darum, dass es funktioniert, es sollte vor allem sauber funktionieren.

harre
Beiträge: 65
Registriert: 22.11.2004 18:50:51
Wohnort: München

Beitrag von harre » 05.07.2005 17:45:34

Servus,

das sollte eigentlich mit der Funktion currval klappen:
Beim Belegen einer Spalte mit 'serial' wird eine Sequenz angelegt, das sieht man, wenn man in psql mal

Code: Alles auswählen

\d tabelle

aufruft.
Da steht dann ein Eintrag mit _seq am Schluss.
Wenn du jetzt einen insert in diese Tabelle machst und anschließend ein

Code: Alles auswählen

select currval ('der_name_dieser_Sequenz')
sollte der Wert angezeigt werden.

So, das ganze ohne Gewähr, ich kanns grad nicht ausprobieren :wink:

Gruß
Harre

Benutzeravatar
hupfdule
Beiträge: 1864
Registriert: 09.12.2002 15:04:37
Wohnort: Berlin
Kontaktdaten:

Beitrag von hupfdule » 05.07.2005 17:54:18

harre hat geschrieben:das sollte eigentlich mit der Funktion currval klappen
Deswegen hab ich das "sauber" erwähnt ;-) Das ist mehr so auf gut Glück. Schließlich könnte die Tabelle ja zwischenzeitilch einen weiteren Eintrag bekommen haben. Ich würde hier ganz gerne auf Transaktionen verzichten, um so was sicherzustellen und frage mich halt, ob man das auch auf geschicktere Art hinbekommt. Eben nicht "ich trage was ein und gucke dann, was gerade der höchste Wert ist"

harre
Beiträge: 65
Registriert: 22.11.2004 18:50:51
Wohnort: München

Beitrag von harre » 05.07.2005 18:07:27

hi,

hast du denn die Funktion schon ausprobiert und mit 2 psql-Sitzungen mal inserts gemacht?
Im Handbuch steht, dass das ganze sitzungsabhängig ist

Harre

Benutzeravatar
hupfdule
Beiträge: 1864
Registriert: 09.12.2002 15:04:37
Wohnort: Berlin
Kontaktdaten:

Beitrag von hupfdule » 05.07.2005 18:46:07

Stimmt :-) Das ist mir offenbar entgangen. Damit ist es natürlihc genau das was ich suche. Jetzt stellt sich die Frage was als Sitzung gilt, weil ich das ganze aus einem Programm heraus mache. Ich vermute mal, dass eine Sitzung dann so lange dauert, bis die Verbindung geschlossen wird. Aber das kann ich ja heraus finden. Danke dir :-)

nepos
Beiträge: 5238
Registriert: 05.01.2005 10:08:12

Beitrag von nepos » 05.07.2005 19:48:06

Am sichersten ist es, den Wert mit einem SELECT und den beim INSERT angegegebenen Daten wieder zu holen.

harre
Beiträge: 65
Registriert: 22.11.2004 18:50:51
Wohnort: München

Beitrag von harre » 06.07.2005 10:02:17

Hi,
solange Dein mit deinem Programm erstellter DB-Handle gültig ist, bist du in einer Sitzung.
Bei einem Disconnect bzw. Programmabruch gehts wieder von vorn los.

@nepos: Ist natürlich auch ne Möglichkeit.

Gruß
Harre

Antworten