Ver Mensaje Individual
  #2 (permalink)  
Antiguo 29/01/2010, 07:38
Avatar de huesos52
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 al insertar datos en una tabla con serial

Hola polmadur..

la explicación de esto la cito exactamente a como dice la documentación oficial de postgres y te la explico después.
Cita:
8.1.4. Serial Types

The data types serial and bigserial are not true types, but merely a notational convenience for setting up unique identifier columns (similar to the AUTO_INCREMENT property supported by some other databases). In the current implementation, specifying

CREATE TABLE tablename (
colname SERIAL
);
is equivalent to specifying:

CREATE SEQUENCE tablename_colname_seq;
CREATE TABLE tablename (
colname integer DEFAULT nextval('tablename_colname_seq') NOT NULL
);
tomado de: http://www.postgresql.org/docs/8.1/i...ATATYPE-SERIAL

La secuencia "inventari_Registre_seq" pero estarías ingresandola 2 veces en campos que no corresponden. Cuando utilizas un tipo de dato serial el crea implicitamente una secuencia que nosotros como administradores de bases de datos ni tenemos conocimiento. Para hacer una inserción correcta en tu tabla sería sin llamar el campo Registre ya que como ves en la documentación es un valor por defecto del campo.

Código SQL:
Ver original
  1. pruebas=> INSERT INTO inventari ("Titol","Autor","Publicacio",
  2. pruebas(> "Col·leccio","Materia","Descriptors","Nivell","Resum","Format",
  3. pruebas(> "Descripcio","ISBN","ISSN") VALUES ('Insercion de serial', 'yo',
  4. pruebas(>  'hoy 2010', '2010,1988 Cristian', 'python', 'tots', 'tots',
  5. pruebas(> 'prueba a ver si meto el serial', 'shell', 'shell', 45-55555-85-6, NULL);
  6. INSERT 0 1

Si en vez de crear el campo serial lo creas como integer o bigint y creas aparte la secuencia, en este caso si es necesario llevar a la inserción la función nextval y pasarle la secuencia manualmente para se haga la inserción.

En pocas palabras, el problema se presenta por que el campo serial pone por defecto el valor de la secuencia creada implícitamente por el mismo campo.

Cita:
PD: soy un poco novato en postgres, si ven alguna mejora en la creacion de tablas se aceptan sugerencias, muchas gracias
la tabla está bien, debes cambiar únicamente la forma de insertar como te lo puse en el ejemplo anterior.

Espero haberte aclarado tus dudas
__________________
Without data, You are another person with an opinion.
W. Edwads Deming