sql >> Database >  >> RDS >> PostgreSQL

mysql_insert_id alternatief voor postgresql

Vanuit het oogpunt van PostgreSQL, in pseudo-code:

 * $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() werkt alleen waar u OID's hebt. OID's zijn standaard uitgeschakeld sinds PostgreSQL 8.1.

Dus, afhankelijk van welke PostgreSQL-versie je hebt, moet je een van de bovenstaande methoden kiezen. Gebruik in het ideale geval natuurlijk een database-abstractiebibliotheek die het bovenstaande wegneemt. Anders ziet het er in low-level code als volgt uit:

Methode één:INSERT... RETOURNEREN

// 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 twee:INSERT; 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 drie:nextval(); INVOEREN

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

De veiligste gok zou de derde methode zijn, maar het is onpraktisch. De schoonste is de eerste, maar u moet een recente PostgreSQL gebruiken. De meeste db-abstractiebibliotheken gebruiken de eerste methode echter nog niet.



  1. CHR() Functie in Oracle

  2. Een reeks getallen genereren in MySQL

  3. Heroku Rails 4 kon geen verbinding maken met de server:verbinding geweigerd

  4. Beheerscripts in R12.2 Ebusiness Suite