2012-09-25 19 views
18

Tengo una tabla que tiene una columna de clave principal "gid" y su tipo es "Integer NOT NULL". Quiero convertirlo en "Serial NOT NULL" para poder insertar algunos valores en esta tabla. I utilizarse siguientes comandos para convertirlo en serie:Cómo convertir un entero a serial

CREATE SEQUENCE test_table_gid_seq 
     INCREMENT 1 
     MINVALUE 1 
     MAXVALUE 2147483648 START 1 
     CACHE 1; 

ALTER TABLE test_table ALTER COLUMN gid 
     SET DEFAULT nextval('test_table_gid_seq'::regclass); 

Este comando convierte número entero a serie. Pero mientras ingresaba algunos datos en la tabla se produjo el siguiente error:

ERROR: el valor duplicado de la clave viola la restricción única "pk_test".

favor me ayude a solucionar esto. ¿Hay algún otro método para convertir un número entero en serie?

+0

duplicado posible de [Adición de 'serie 'a la columna existente en Postgres] (http://stackoverflow.com/questions/9490014/adding-serial-to-existing-column-in-postgres) – kryger

Respuesta

25

seleccionar el valor máximo de la columna GID (max_gid):

SELECT max(gid) FROM test_table; 

y lo utilizan como punto de inicio para la secuencia (probablemente, max_gid + 1):

ALTER SEQUENCE test_table_gid_seq RESTART WITH max_gid; 
+0

todavía no es fácil de envolver? – jangorecki

Cuestiones relacionadas