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
-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org)
Para cambiar tu suscripci�n:
http://www.postgresql.org/mailpref/pgsql-es-ayuda

Responder a