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
<[email protected]>escribió:
> El día 22 de marzo de 2011 13:28, Guillermo Villanueva
> <[email protected]> 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
>