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 >