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

Problema al insertar datos en una tabla con serial

Estas en el tema de Problema al insertar datos en una tabla con serial en el foro de PostgreSQL en Foros del Web. hola buenas, vereis estoy haciendo una base de datos para lleva un pequeño inventario de libros que hay en un centro, creo un campo llamado ...
  #1 (permalink)  
Antiguo 29/01/2010, 06:12
 
Fecha de Ingreso: enero-2010
Mensajes: 49
Antigüedad: 14 años, 9 meses
Puntos: 0
Problema al insertar datos en una tabla con serial

hola buenas, vereis estoy haciendo una base de datos para lleva un pequeño inventario de libros que hay en un centro, creo un campo llamado Registre el cual es un serial, para que lleve un autoincremento, pero no consigo meter datos en la tabla, siempre me da error y me gustaria saber exactamente la sintaxis para insertar datos habiendo un campo serial.

Asi cree la base.
Create table Inventari (
"Registre" serial not null,
"Títol" char(100) not null,
"Autor" char(70) not null,
"Publicació" char(100) not null,
"Col·lecció" char(100) not null,
"Matèria" char(20) not null,
"Descriptors" char(50) not null,
"Nivell" char(20) not null,
"Resum" text not null,
"Format" char(20) not null,
"Descripció" char(20) not null,
"ISBN" char(30) null,
"ISSN" char(30) null
);

y asi intento insertar datos:
insert into inventari values (nextval("inventari_Registre_seq") , 'Insercion de serial', 'yo', 'hoy 2010', '2010,1988 Cristian', 'python', 'tots', 'tots', 'prueba a ver si meto el serial', 'shell', 'shell', 45-55555-85-6, null);
Si lo inserto asi me dice que la columna nextval("inventa......) doesnt exists,

no se como poder insertarlo bien

PD: soy un poco novato en postgres, si ven alguna mejora en la creacion de tablas se aceptan sugerencias, muchas gracias
  #2 (permalink)  
Antiguo 29/01/2010, 07:38
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 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
  #3 (permalink)  
Antiguo 01/02/2010, 08:06
 
Fecha de Ingreso: enero-2010
Mensajes: 49
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Problema al insertar datos en una tabla con serial

ok muchas gracias, ya he podido insertar bien los datos
  #4 (permalink)  
Antiguo 18/02/2010, 11:04
 
Fecha de Ingreso: febrero-2010
Ubicación: Machala
Mensajes: 9
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Problema al insertar datos en una tabla con serial

Hola, yo hice algo parecido, y si se me auto-incrementa el campo, pero solo si inserto de la forma que menciona ud.

Ahora, si yo inserto los mismos datos, pero incluyo el valor del registre que se supone el serial debería auto-incrementar, a lo que hago eso, si intento otra vez usar la función para que me auto-incremente me sale un error algo parecido a:

Unique violation:7 ERROR: llave dupliada viola restriccion de unicidad pk_nombre_llave_primaria

Cómo podria hacer para que esa funcion que autoincrementa se actualice al ultimo id del registro insertado, para que me vuelva a trabajar el autoincremente?

Etiquetas: serial, tablas
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:08.