PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

alternativa mysql_insert_id para postgresql


Do ponto de vista do PostgreSQL, em 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() só funciona onde você tem OIDs. Os OIDs estão desativados por padrão desde o PostgreSQL 8.1.

Portanto, dependendo de qual versão do PostgreSQL você possui, você deve escolher um dos métodos acima. Idealmente, é claro, use uma biblioteca de abstração de banco de dados que abstraia o acima. Caso contrário, em código de baixo nível, fica assim:

Método um:INSERIR... RETORNANDO

// 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 dois:INSERIR; 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];

Método três:nextval(); INSERIR

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

A aposta mais segura seria o terceiro método, mas é complicado. O mais limpo é o primeiro, mas você precisaria rodar um PostgreSQL recente. A maioria das bibliotecas de abstração de banco de dados ainda não usa o primeiro método.