dackmo: ID nach insert zurück bekommen (postgresql)

Hallo,

wenn ich in eine Tabelle z.B.
CREATE TABLE data ( ID serial NOT NULL, NAME varchar(25) );
einen neuen Datensatz inserte (also nur einen neuen Namen inserte)  und ich die generierte ID bekommen möchte, wie mache ich das? (mit select max(id) geht es ja nicht, da ja jemand zwischen insert und select auch einen Datensatz eingefügt und eine höhere ID bekommen haben kann). Gibts da ein Funktion, die direkt die ID des Inserts zurück gibt?

CU,
dackmo

  1. wenn ich in eine Tabelle z.B.
    CREATE TABLE data ( ID serial NOT NULL, NAME varchar(25) );
    einen neuen Datensatz inserte (also nur einen neuen Namen inserte)  und ich die generierte ID bekommen möchte, wie mache ich das? (mit select max(id) geht es ja nicht, da ja jemand zwischen insert und select auch einen Datensatz eingefügt und eine höhere ID bekommen haben kann). Gibts da ein Funktion, die direkt die ID des Inserts zurück gibt?

    http://de2.php.net/manual/en/function.pg-last-oid.php

    1. http://de2.php.net/manual/en/function.pg-last-oid.php

      ups, übersehen! wer lesen kann ist klar im vorteil.....

  2. Hallo dackmo,

    Gibts da ein Funktion, die direkt die ID des Inserts zurück gibt?

    Ja, currval(). In der Praxis sieht das so aus, dass für ein Serial-Feld automatisch eine entsprechende Sequenz erstellt wird, in deinem Beispiel würdest du die ID des zuletzt eingetragenen Datensatzes mit

    currval('data_ID_seq')

    bekommen.

    Schöne Grüße,

    Johannes