2012-09-25 18 views
18

Ho una tabella che ha una colonna chiave primaria "gid" e il suo tipo è "Intero NOT NULL". Voglio convertirlo in "Serial NOT NULL" in modo da poter inserire alcuni valori in questa tabella. I seguenti comandi usato per convertire in serie:Come convertire un numero intero in serie

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); 

Questo comando convertito integer a seriale. Ma mentre ho inserito alcuni dati nella tabella seguente errore si è verificato:

ERRORE: valore chiave duplicato viola il vincolo univoco "pk_test".

Please help me per risolvere questo. C'è qualche altro metodo per convertire numeri interi in serie?

+0

Possibile duplicato di [Aggiunta 'di serie 'alla colonna esistente in Postgres] (http://stackoverflow.com/questions/9490014/adding-serial-to-existing-column-in-postgres) – kryger

risposta

25

Selezionare il valore massimo della colonna GID (max_gid):

SELECT max(gid) FROM test_table; 

e usarlo come punto di partenza per la sequenza (probabilmente, max_gid + 1):

ALTER SEQUENCE test_table_gid_seq RESTART WITH max_gid; 
+0

wrapper ancora non facile? – jangorecki

Problemi correlati