PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

mysql_insert_id-Alternative für postgresql

Aus Sicht von PostgreSQL in Pseudocode:

 * $insert_id = INSERT...RETURNING foo_id;-- only works for PostgreSQL >= 8.2. 

 * INSERT...; $insert_id = SELECT lastval(); -- works for PostgreSQL >= 8.1

 * $insert_id = SELECT nextval('foo_seq'); INSERT INTO table (foo...) values ($insert_id...) for older PostgreSQL (and newer PostgreSQL)

pg_last_oid() funktioniert nur, wo Sie OIDs haben. OIDs sind seit PostgreSQL 8.1 standardmäßig deaktiviert.

Je nachdem, welche PostgreSQL-Version Sie haben, sollten Sie also eine der oben genannten Methoden auswählen. Verwenden Sie im Idealfall natürlich eine Datenbank-Abstraktionsbibliothek, die das Obige abstrahiert. Andernfalls sieht es in Low-Level-Code so aus:

Methode eins:INSERT... RETURNING

// yes, we're not using pg_insert()
$result = pg_query($db, "INSERT INTO foo (bar) VALUES (123) RETURNING foo_id");
$insert_row = pg_fetch_row($result);
$insert_id = $insert_row[0];

Methode zwei:EINFÜGEN; lastval()

$result = pg_execute($db, "INSERT INTO foo (bar) values (123);");
$insert_query = pg_query("SELECT lastval();");
$insert_row = pg_fetch_row($insert_query);
$insert_id = $insert_row[0];

Methode drei:nextval(); EINFÜGEN

$insert_query = pg_query($db, "SELECT nextval('foo_seq');");
$insert_row = pg_fetch_row($insert_query);
$insert_id = $insert_row[0];
$result = pg_execute($db, "INSERT INTO foo (foo_id, bar) VALUES ($insert_id, 123);");

Am sichersten wäre die dritte Methode, aber sie ist unhandlich. Das sauberste ist das erste, aber Sie müssten ein aktuelles PostgreSQL ausführen. Die meisten DB-Abstraktionsbibliotheken verwenden jedoch noch nicht die erste Methode.