2011-04-06 48 views
8

Tôi đang cố gắng thay đổi giá trị tối thiểu của một chuỗi hiện tại.Thay đổi giá trị tối thiểu của chuỗi của Postgres

Đầu tiên tôi đã cố gắng

ALTER SEQUENCE product_id_seq MINVALUE 10000; 

và tôi đã nhận ERROR: START value (1) cannot be less than MINVALUE (10000).

Vì vậy, tôi đã cố gắng

ALTER SEQUENCE product_id_seq MINVALUE 10000 RESTART WITH 10000; 

nhưng có những lỗi tương tự.

Tất nhiên tôi chỉ có thể thả nó và tạo một cái mới, nhưng tôi nghĩ rằng cần có một cách để làm điều này. Tôi đang sử dụng Postgres 8.4.7.

Trả lời

7

Làm thế nào về việc thiết them all cùng một lúc:

ALTER SEQUENCE product_id_seq 
MINVALUE 10000 
START 10000 
RESTART 10000; 

Điều đó sẽ thay đổi tối thiểu, bắt đầu, và hiện tại giá trị tất cả 10000 và do đó làm cho tất cả mọi thứ phù hợp.

+0

Cảm ơn bạn. Tôi không biết làm thế nào tôi bị mất tham số đó. =) – dasony

+1

@ dasony: Có thể việc đặt tên kỳ quặc của 'RESTART' gây ra một số nhầm lẫn, tôi đã mong đợi nó được gọi là 'CURRENT'. –

0

Tôi đã thực hiện kiểm tra sau, Phiên bản của tôi là 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 có một số functions that operate on sequences. Ngoài các hướng dẫn khác tại đây, bạn có thể sử dụng

SELECT setval('product_id_seq ', 10000); -- Next nextval() returns 10001 
Các vấn đề liên quan