Has primero select * from facturacion.nomenclador where id_nomenclador_detalle = curval('sequencia_id_nomenclador') +1
Fijate que el nombre de la secuencia lo tienes que cambiar por la que te asigno postgres. El día 22 de marzo de 2011 15:04, Guillermo Villanueva <guillermo...@gmail.com> escribió: > Que raro amigos, me da clave duplicada, les mando los datos exactos (tablas > reales), por si tienen tiempo para ayudarme: > CREATE TABLE facturacion.nomenclador > ( > id_nomenclador serial NOT NULL, > codigo text, > grupo text, > subgrupo text, > descripcion text, > precio numeric(30,6), > tipo_nomenclador text, > id_nomenclador_detalle integer, > CONSTRAINT nomenclador_pkey PRIMARY KEY (id_nomenclador), > CONSTRAINT nomenclador_id_nomenclador_detalle_fkey FOREIGN KEY > (id_nomenclador_detalle) > REFERENCES facturacion.nomenclador_detalle (id_nomenclador_detalle) > MATCH SIMPLE > ON UPDATE RESTRICT ON DELETE RESTRICT > ) > > -- tengo muchos datos en nomenclador con id_nomenclador_detalle = 3 > -- entonces hago lo siguiente para armar el nomenclador 5 > INSERT INTO facturacion.nomenclador( > codigo, grupo, subgrupo, descripcion, precio, > tipo_nomenclador, id_nomenclador_detalle) > SELECT codigo, grupo, subgrupo, descripcion, precio, > tipo_nomenclador, 5 > FROM facturacion.nomenclador > where id_nomenclador_detalle = 3 > -- y me da el siguiente error > -- ERROR: duplicate key value violates unique constraint "nomenclador_pkey" > > Saludos > > ~~~~~~~~~~~~~~~~ > Guillermo Villanueva > > > El 22 de marzo de 2011 09:46, Emanuel Calvo Franco <postgres....@gmail.com> > escribió: >> >> El día 22 de marzo de 2011 13:28, Guillermo Villanueva >> <guillermo...@gmail.com> escribió: >> > Buenas, tengo una tabla donde la pk es un serial >> > supongamos >> > CREATE TABLE t1 >> > ( >> > campo1 serial NOT NULL, >> > campo2 varchar(20), >> > campo3 integer, >> > CONSTRAINT t1_pkey PRIMARY KEY (campo1), >> > ) >> > y necesito hacer un insert basado en un select sobre datos de la misma >> > tabla.... >> > intenté: >> > insert into t1 (campo2,campo3) >> > select campo2,5 >> > from t1 >> > where >> > campo3 =4; >> > pero no funcionó, me da clave duplicada >> > cómo hago? >> > Desde ya muchas gracias >> > Saludos >> > >> >> He hecho la prueba y no he tenido problemas: >> >> postgres=# CREATE TABLE t1 >> postgres-# ( >> postgres(# campo1 serial NOT NULL, >> postgres(# campo2 varchar(20), >> postgres(# campo3 integer, >> postgres(# CONSTRAINT t1_pkey PRIMARY KEY (campo1) >> postgres(# ); >> NOTICE: CREATE TABLE crearA¡ una secuencia implA-cita A«t1_campo1_seqA» >> para la >> columna serial A«t1.campo1A» >> NOTICE: CREATE TABLE / PRIMARY KEY crearA¡ el A-ndice implA-cito >> A«t1_pkeyA» pa >> ra la tabla A«t1A» >> CREATE TABLE >> postgres=# >> postgres=# insert into t1 (campo2,campo3) >> postgres-# select campo2,5 >> postgres-# from t1 >> postgres-# where >> postgres-# campo3 =4; >> INSERT 0 0 >> postgres=# insert into t1(campo2,campo3) values ('pg',4); >> INSERT 0 1 >> postgres=# insert into t1(campo2,campo3) values ('p12g',3); >> INSERT 0 1 >> postgres=# >> postgres=# insert into t1 (campo2,campo3) >> postgres-# select campo2,5 >> postgres-# from t1 >> postgres-# where >> postgres-# campo3 =4; >> INSERT 0 1 >> postgres=# select * from t1; >> campo1 | campo2 | campo3 >> --------+--------+-------- >> 1 | pg | 4 >> 2 | p12g | 3 >> 3 | pg | 5 >> (3 filas) >> >> >> >> >> >> -- >> -- >> Emanuel Calvo >> Helpame.com > > -- -- Emanuel Calvo Helpame.com - Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org) Para cambiar tu suscripci�n: http://www.postgresql.org/mailpref/pgsql-es-ayuda