Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » PostgreSQL »

Saber el proximo ID a insertar

Estas en el tema de Saber el proximo ID a insertar en el foro de PostgreSQL en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 30/08/2010, 07:36
Avatar de germana  
Fecha de Ingreso: abril-2007
Mensajes: 61
Antigüedad: 17 años
Puntos: 0
Saber el proximo ID a insertar

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
  #2 (permalink)  
Antiguo 30/08/2010, 18:15
Avatar de xdrtas  
Fecha de Ingreso: junio-2008
Ubicación: Venezuela
Mensajes: 97
Antigüedad: 15 años, 10 meses
Puntos: 13
Respuesta: Saber el proximo ID a insertar

Hola germana,
Cita:
Iniciado por germana Ver Mensaje
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
  1. 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.
  2. 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".
  3. 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 original
  1. SELECT lastval()+1 AS id;
  2.  id
  3. ----
  4.  24
  5. (1 fila)
  6.  
  7.  
  8. SELECT currval('ajax_id_seq') + 1 AS id;
  9.  id
  10. ----
  11.  24
  12. (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.
__________________
¿Cuál es el mejor lenguaje para programar?
Aquel lenguaje por el cual te paguen más.
[--::xdrtas.coolpage.biz::--]
[---:::xdrtas:::---]
  #3 (permalink)  
Antiguo 01/09/2010, 17:55
Avatar de germana  
Fecha de Ingreso: abril-2007
Mensajes: 61
Antigüedad: 17 años
Puntos: 0
Respuesta: Saber el proximo ID a insertar

Excelente! Gracias....
  #4 (permalink)  
Antiguo 01/09/2010, 21:45
Avatar de xdrtas  
Fecha de Ingreso: junio-2008
Ubicación: Venezuela
Mensajes: 97
Antigüedad: 15 años, 10 meses
Puntos: 13
Respuesta: Saber el proximo ID a insertar

Cita:
Iniciado por germana Ver Mensaje
Excelente! Gracias....
No hay problema, saludos...
__________________
¿Cuál es el mejor lenguaje para programar?
Aquel lenguaje por el cual te paguen más.
[--::xdrtas.coolpage.biz::--]
[---:::xdrtas:::---]

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:38.