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

problema campo serial no incrementa completamente cuando insert con generate series

Estas en el tema de problema campo serial no incrementa completamente cuando insert con generate series en el foro de PostgreSQL en Foros del Web. Saludos la situacion es la siguiente cuando hago insert a partir de un select en el que le coloco un generate series, este no me ...
  #1 (permalink)  
Antiguo 22/02/2010, 09:25
Avatar de wpersei  
Fecha de Ingreso: septiembre-2006
Ubicación: Bogota
Mensajes: 189
Antigüedad: 18 años, 2 meses
Puntos: 1
problema campo serial no incrementa completamente cuando insert con generate series

Saludos

la situacion es la siguiente

cuando hago insert a partir de un select en el que le coloco un generate series, este no me incrementa la secuencia que le coloco a la llave primaria


este es el insert que realizo

Código:
INSERT INTO tabla(nro, campo1, campo2)
                select generate_series(1,10000), 1, 2;
entonces por alguna razon la secuencia queda en un valor por ejemplo de 9203 y cuando voy a realizar el siguiente insert me da error por el primary key

la solucion a esto siempre ha sido establecer el valor de la secuencia manualmente, pero quisiera solucionar la situacion o al menos saber porque pasa

suerte y gracias por responder
__________________
www.ogallardo.com - Mi blog
  #2 (permalink)  
Antiguo 22/02/2010, 10:22
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: problema campo serial no incrementa completamente cuando insert con genera

Cita:
entonces por alguna razon la secuencia queda en un valor por ejemplo de 9203 y cuando voy a realizar el siguiente insert me da error por el primary key
Porque cuando se tiene un campo serial y se inserta un valor manualmente, la secuencia no se modifica. La secuencia solo se modifica en el momento en que se inserta automáticamente haciendo uso del campo.

Entonces... los primeros valores te los inserta bien, pero al tratar de volver a insertar valores ya existentes, te va a dar un problema de primary keys.

Esto lo puedes comprobar con el siguiente ejemplo en el cual si utilizamos por defecto el valor de la secuencia

Código SQL:
Ver original
  1. pruebas=> SELECT *FROM generando;
  2.  nro | campo1 | campo2
  3. -----+--------+--------
  4. (0 filas)
  5. pruebas=> INSERT INTO generando (campo1,campo2) SELECT generate_series(1,5),2;
  6. INSERT 0 5
  7. pruebas=> INSERT INTO generando (campo1,campo2) SELECT generate_series(1,5),2;
  8. INSERT 0 5
  9. pruebas=> INSERT INTO generando (campo1,campo2) SELECT generate_series(1,5),2;
  10. INSERT 0 5
  11. pruebas=> SELECT *FROM generando;
  12.  nro | campo1 | campo2
  13. -----+--------+--------
  14.    1 |      1 |      2
  15.    2 |      2 |      2
  16.    3 |      3 |      2
  17.    4 |      4 |      2
  18.    5 |      5 |      2
  19.    6 |      1 |      2
  20.    7 |      2 |      2
  21.    8 |      3 |      2
  22.    9 |      4 |      2
  23.   10 |      5 |      2
  24.   11 |      1 |      2
  25.   12 |      2 |      2
  26.   13 |      3 |      2
  27.   14 |      4 |      2
  28.   15 |      5 |      2
  29. (15 filas)
  30.  
  31. pruebas=>

Saludos wpersei
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 22/02/2010, 14:24
Avatar de wpersei  
Fecha de Ingreso: septiembre-2006
Ubicación: Bogota
Mensajes: 189
Antigüedad: 18 años, 2 meses
Puntos: 1
Respuesta: problema campo serial no incrementa completamente cuando insert con genera

gracias por responder


creo que no me he hecho entender:

supongamos que tengo una tabla "generando" con 4 campos

id -> llave primaria y campo serial
nro -> numero que quiero insertar con generate series
campo1 -> otro campo para agregar en el select
campo2 -> otro campo para agregar en el select


entonces

cuando hago

Código SQL:
Ver original
  1. INSERT INTO generando (nro, campo1, campo2)
  2. SELECT generate_series(1,5),1, 2;

como puedes ver dejo que la secuencia trabaje ya que no le indico cual es el valor de la llave primaria, según el insert si no tuviéramos ningun valor en la tabla y la secuencia iniciara en 1 el valor de la secuencia después del insert seria 6, pero el problema es que cuando la serie es algo grande a veces queda valiendo un numero menor como por decir algo = 3

ahí el problema que como los insert cuyo primarykey es una secuencia, leen de ahi para insertar el dato entonces dan error

la solución que he hecho es que una vez se termina de insertar vuelvo a establecer el valor de la secuencia de esta forma:
Código SQL:
Ver original
  1. SELECT SETVAL('public.generando_id_seq', 6,  TRUE);

pero la verdad es una solución que no me gusta

mas bien quisiera saber porque ocurre y de ahí de pronto encontrar una solución o talves yo este haciendo algo indebido

saludos
__________________
www.ogallardo.com - Mi blog

Etiquetas: cuando, insert, serial, series, campos
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:28.