Re: last_insert_id (php)

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

In response to

Browse pgsql-de-allgemein by date

  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)