PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

mysql_insert_id alternatywa dla postgresql

Z punktu widzenia PostgreSQL, w pseudokodzie:

 * $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() działa tylko tam, gdzie masz identyfikatory OID. OID są domyślnie wyłączone od czasu PostgreSQL 8.1.

Tak więc, w zależności od posiadanej wersji PostgreSQL, powinieneś wybrać jedną z powyższych metod. Najlepiej oczywiście użyć biblioteki abstrakcji bazy danych, która abstrahuje powyższe. W przeciwnym razie w kodzie niskiego poziomu wygląda to tak:

Sposób pierwszy:WSTAW... POWRÓT

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

Metoda druga:WSTAW; 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];

Metoda trzecia:nextval(); WSTAW

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

Najbezpieczniejszym zakładem byłaby trzecia metoda, ale jest niewygodna. Najczystszy jest pierwszy, ale musisz uruchomić najnowszy PostgreSQL. Większość bibliotek abstrakcji db nie używa jednak jeszcze pierwszej metody.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Średnia ruchoma na podstawie znaczników czasu w PostgreSQL

  2. PostgreSQL 9.3:Dynamiczna tabela przestawna

  3. Moje ulubione zapytania PostgreSQL i ich znaczenie

  4. Jak unpivotować tabelę w PostgreSQL

  5. Jak skopiować z pliku CSV do tabeli PostgreSQL z nagłówkami w pliku CSV?