2012-09-25 22 views
18

Mam tabelę, która ma kolumnę klucza podstawowego "gid", a jej typ to "Integer NOT NULL". Chcę przekonwertować go na "Serial NOT NULL", aby móc wstawić niektóre wartości do tej tabeli. że stosuje następujące polecenia, aby przekształcić go do szeregowego:Jak przekonwertować liczbę całkowitą na seryjną

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

Polecenie przekształca liczbę całkowitą seryjny. Ale gdy wprowadziłem pewne dane do tabeli po wystąpieniu błędu:

BŁĄD: zduplikowana wartość klucza narusza ograniczenie "pk_test".

Proszę mi pomóc rozwiązać ten problem. Czy istnieje inna metoda konwersji liczby całkowitej na seryjną?

+0

Możliwe duplikat [Dodanie „szeregowy "do istniejącej kolumny w Postgresie] (http://stackoverflow.com/questions/9490014/adding-serial-to-exististing-column-in-postgres) – kryger

Odpowiedz

25

wybrać maksymalną wartość gid kolumny (max_gid):

SELECT max(gid) FROM test_table; 

i wykorzystać jako punkt odniesienia w kolejności (prawdopodobnie max_gid + 1)

ALTER SEQUENCE test_table_gid_seq RESTART WITH max_gid; 
+0

nadal niełatwe opakowanie? – jangorecki

Powiązane problemy