sql >> Base de Datos >  >> RDS >> PostgreSQL

alternativa mysql_insert_id para postgresql

Desde el punto de vista de PostgreSQL, en pseudocódigo:

 * $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() solo funciona donde tiene OID. Los OID han estado desactivados de forma predeterminada desde PostgreSQL 8.1.

Entonces, dependiendo de la versión de PostgreSQL que tenga, debe elegir uno de los métodos anteriores. Idealmente, por supuesto, use una biblioteca de abstracción de base de datos que abstraiga lo anterior. De lo contrario, en código de bajo nivel, se ve así:

Método uno:INSERTAR... VOLVER

// 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];

Método dos:INSERTAR; último valor()

$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];

Método tres:nextval(); INSERTAR

$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);");

La apuesta más segura sería el tercer método, pero es difícil de manejar. El más limpio es el primero, pero necesitaría ejecutar un PostgreSQL reciente. Sin embargo, la mayoría de las bibliotecas de abstracción de db aún no usan el primer método.