2011-06-26 18 views
12

Encontré un par de otras preguntas sobre este tema. Éste ...PHP Postgres: Obtener último inserto ID

mysql_insert_id alternative for postgresql

... y the manual parecen indicar que se puede llamar lastval() cualquier momento y funcionará como se espera. Pero éste ...

Postgresql and PHP: is the currval a efficent way to retrieve the last row inserted id, in a multiuser application?

... parece indicar que tiene que estar dentro de una transacción. Entonces mi pregunta es la siguiente: ¿puedo esperar todo el tiempo que quiera antes de consultar lastval() (sin una transacción)? ¿Y eso es confiable frente a muchas conexiones simultáneas?

+0

Las secuencias dependen de la sesión no de la transacción. Pero no es bueno esperar y ejecutar otras consultas mientras tanto, puede recibir lastval de otra consulta. – jordani

Respuesta

28

INSERT, UPDATE y DELETE en PostgreSQL tienen una cláusula DEVOLUCIÓN que significa que puede hacer:

INSERT INTO .... 
RETURNING id; 

A continuación, la consulta devolverá el valor se inserta ID para cada fila insertada. Guarda una ida y vuelta al servidor.

+0

¡Muchas gracias por esta respuesta! Exactamente lo que necesitaba, reduce a la mitad el número de consultas que necesito realizar para ciertas operaciones. –

+2

Gracias! Por cierto, si es necesario, puede devolver varios valores: DEVOLVER * devolverá toda la fila insertada. – SamGoody

+0

¿Qué sucede si no conoce el nombre del campo de identificación? – JoeTidee

6

sí, the sequence functions proporcionar multiusuario seguro métodos para obtener sucesivos valores de secuencia a partir de objetos de secuencia.

+1

Estoy tan contento de ver que las secuencias ahora son ANSI - AUTOINCREMENT/IDENTITY son demasiado limitantes. –

+0

Excelente, gracias. – Jonah

Cuestiones relacionadas