2011-04-06 7 views
8

Próbuję zmienić minimalną wartość istniejącej sekwencji.Zmiana minimalnej wartości sekwencji PostgreSta

Najpierw próbowałem

ALTER SEQUENCE product_id_seq MINVALUE 10000; 

i mam ERROR: START value (1) cannot be less than MINVALUE (10000).

Więc próbowałem

ALTER SEQUENCE product_id_seq MINVALUE 10000 RESTART WITH 10000; 

ale mam ten sam błąd.

Oczywiście mógłbym porzucić i stworzyć nowy, ale myślę, że powinien istnieć sposób na zrobienie tego. Używam Postgres 8.4.7.

Odpowiedz

7

Jak o ustawienie them all naraz:

ALTER SEQUENCE product_id_seq 
MINVALUE 10000 
START 10000 
RESTART 10000; 

To powinno zmienić minimum począwszy, a wszystkie bieżące wartości do 10000, a zatem uczynić wszystko spójne.

+0

Dziękuję. Nie wiem, jak przegapiłem ten parametr. =) – dasony

+1

@dasony: Być może dziwne nazewnictwo 'RESTART' spowodowało pewne zamieszanie, oczekiwałem, że będzie to nazywane' CURRENT'. –

0

Przeprowadziłem następujący test, moja wersja to 9.0.

--create sequence 
skytf=> CREATE SEQUENCE seq_test 
skytf->  START WITH 1 
skytf->  INCREMENT BY 1 
skytf->  NO MINVALUE 
skytf->  NO MAXVALUE 
skytf->  CACHE 1; 
CREATE SEQUENCE 

skytf=> \d seq_test 
      Sequence "skytf.seq_test" 
    Column  | Type |  Value   
---------------+---------+--------------------- 
sequence_name | name | seq_test 
last_value | bigint | 1 
start_value | bigint | 1 
increment_by | bigint | 1 
max_value  | bigint | 9223372036854775807 
min_value  | bigint | 1 
cache_value | bigint | 1 
log_cnt  | bigint | 1 
is_cycled  | boolean | f 
is_called  | boolean | f 


skytf=> select nextval('seq_test'); 
nextval 
--------- 
     1 
(1 row) 

--alter sequence 
skytf=> alter sequence seq_test restart with 100; 
ALTER SEQUENCE 
skytf=> \d seq_test 
      Sequence "skytf.seq_test" 
    Column  | Type |  Value   
---------------+---------+--------------------- 
sequence_name | name | seq_test 
last_value | bigint | 100 
start_value | bigint | 1 
increment_by | bigint | 1 
max_value  | bigint | 9223372036854775807 
min_value  | bigint | 1 
cache_value | bigint | 1 
log_cnt  | bigint | 1 
is_cycled  | boolean | f 
is_called  | boolean | f 

skytf=> select nextval('seq_test'); 
nextval 
--------- 
    100 
(1 row)