Re: insert con serial

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

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
<guillermovil(at)gmail(dot)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(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
>
>

--
--
              Emanuel Calvo
              Helpame.com

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Emanuel Calvo Franco 2011-03-22 17:31:38 Re: insert con serial
Previous Message Gilberto Castillo Martínez 2011-03-22 14:14:34 Re: insert con serial