Re: insert con serial

From: Guillermo Villanueva <guillermovil(at)gmail(dot)com>
To: Emanuel Calvo Franco <postgres(dot)arg(at)gmail(dot)com>
Cc: pgsql-es-ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: insert con serial
Date: 2011-03-22 14:04:51
Message-ID: AANLkTik+B9ZDQrhrEbV+XEN_21p3uE2__jA102F7THXk@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

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(dot)arg(at)gmail(dot)com>escribió:

> El día 22 de marzo de 2011 13:28, Guillermo Villanueva
> <guillermovil(at)gmail(dot)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
>

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Gilberto Castillo Martínez 2011-03-22 14:14:34 Re: insert con serial
Previous Message Lazaro Ruben Garcia Martinez 2011-03-22 13:55:13 Re: Complicado en NET...