From: | Stefan Kaltenbrunner <stefan(at)kaltenbrunner(dot)cc> |
---|---|
To: | Marco Behnke <m(dot)behnke(at)portrix(dot)net> |
Cc: | pgsql-de-allgemein(at)postgresql(dot)org |
Subject: | Re: last_insert_id (php) |
Date: | 2006-07-24 16:44:05 |
Message-ID: | 44C4F8D5.9010800@kaltenbrunner.cc |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-de-allgemein |
Marco Behnke wrote:
> Ok, auf zu Frage drei :)
>
> In meinem alten System (mysql) habe ich nach dem Speichern von Objekten
> mit mysql_insert_id() die zuletzt vergebene ID des auto_increment
> ausgelesen und so die ID des Objektes ermittelt.
>
> Das Postgres ein anderes Konzept hat (Sequenzen) und ich keine Funktion
> gesehen habe, die soetwas macht, werde ich mir wohl mit einem Umweg
> behelfen müssen.
>
> Transktionen starten
> Nächste ID aus Sequenz holen
> Objekt explizit mit ermittelter ID Speichern
> Tranaktion commiten
> ID zurückliefern
das mit der Transaktion an sich ist überflüssig da Sequences per-session
operieren (und das macht sie auch usable - ansonsten gebs da jede Menge
race-conditions und concurrency Issues).
Zudem genügt ein Aufruf von select currval('sequence'); um den zuletzt
in der Session vergebene id zu ermitteln (zB die dein INSERT zuvor
implizit erzeugt hat).
>
> Ich frage nur sicherheitshalber, nicht dass es da doch noch was gibt.
> Oder habe ich vielleicht eine Möglichkeit mit dem Return-Value von
> pg_query("INSERT INTO.....") etwas anzufangen?
das was du möchtest nennt sich INSERT ... RETURNING und ist leider im
Moment nicht verfügbar - mit viel Glück vielleicht in 8.2 ...
Stefan
From | Date | Subject | |
---|---|---|---|
Next Message | A. Kretschmer | 2006-07-24 19:06:31 | Re: last_insert_id (php) |
Previous Message | Marco Behnke | 2006-07-24 15:31:34 | last_insert_id (php) |