Hola germana,
Cita:
Iniciado por germana Saludos!!
Lo que necesito es aparentemente simple: saber el proximo id que se insertara en una tabla cuyo campo ID se auto incrementa, por lo que tengo esto:
Código:
$res = pg_query("SELECT nextval('nomina_temporal_id_seq') as id");
$row = pg_fetch_array($res, 0);
$nomina_tmp_id = trim($row["id"]);
Pero, esto por ejemplo, selecciona el ID "90" y el id que se inserta en la tabla es 91 ( este codigo lo ejecuta antes del INSERT)
Lo otro que se me ocurre es hacer un select del ultimo registro insertado - despues de INSERT ¿?
alguna idea mejor?
GRACIAS
- No uses nextval tan arbitrariamente, esta función incrementa el valor de la secuencia siempre que lo uses, incluido en una sentencia SELECT como lo pones en tu ejemplo.
- Podrías usar la siguiente consulta "SELECT currval('secuencia') + 1 as id;. Currval -> "Return the value most recently obtained by nextval for this sequence in the current session", que significa: "Devuelve el valor más reciente obtenido por nextval para la secuencia usada en la sesión actual".
- Te dejo el link que explica como se usan nextval, currval, setval y lastval: http://www.postgresql.org/docs/8.4/s...-sequence.html
Te pongo un ejemplo con una tabla que tengo con 23 registros, usando lastval y currval, verás que obtengo los mismos resultados:
Código SQL:
Ver originalSELECT lastval()+1 AS id;
id
----
24
(1 fila)
SELECT currval('ajax_id_seq') + 1 AS id;
id
----
24
(1 fila)
24 es el siguiente valor de la secuencia, o sea, que el siguiente registro tendrá como ID el valor de 24.
Te recomiendo que tengas mucho cuidado a la hora de hacer este tipo de comprobaciones, recuerda que en una aplicación web varias personas pueden insertar, actualizar y borrar datos al mismo tiempo.
También puedes hacer lo que dices tú, hacer un select del último registro insertado.
Un cordial saludo.