Skip site navigation (1) Skip section navigation (2)

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 (view raw or flat)
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

pgsql-es-ayuda by date

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

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group