2011-04-06 8 views
8

既存のシーケンスの最小値を変更しようとしています。Postgresのシーケンスの最小値を変更する

まず私は

ALTER SEQUENCE product_id_seq MINVALUE 10000; 

を試してみましたが、私はERROR: START value (1) cannot be less than MINVALUE (10000)を得ました。

だから私は

ALTER SEQUENCE product_id_seq MINVALUE 10000 RESTART WITH 10000; 

を試してみましたが、同じエラーを得ました。

もちろん、私はそれを削除して新しいものを作成することができますが、これを行う方法があるはずです。私はPostgres 8.4.7を使用しています。

一度 them allの設定についてどのように

答えて

7

:10000に全出発し、現在の値、最小値を変更するため、すべてが一貫するべき

ALTER SEQUENCE product_id_seq 
MINVALUE 10000 
START 10000 
RESTART 10000; 

を。

+0

ありがとうございます。どのように私はそのパラメータを逃したのか分かりません。 =) – dasony

+1

@dasony:おそらく、RESTARTの奇妙な名前が混乱を引き起こしていた可能性があるので、私はそれを 'CURRENT'と呼ぶことを期待していました。 –

0

私は次のテストを行っています。私のバージョンは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) 
1

PostgreSQLには複数のfunctions that operate on sequencesがあります。ここの他のガイダンスに加えて、

SELECT setval('product_id_seq ', 10000); -- Next nextval() returns 10001 
関連する問題