改变Postgres序列的最小值

时间:2011-04-06 03:52:16

标签: sql postgresql sequence

我正在尝试更改现有序列的最小值。

首先我试过

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。

3 个答案:

答案 0 :(得分:8)

如何立即设置them all

ALTER SEQUENCE product_id_seq
MINVALUE 10000
START 10000
RESTART 10000;

这应该将最小值,起始值和当前值全部更改为10000,从而使所有内容保持一致。

答案 1 :(得分:1)

PostgreSQL有几个functions that operate on sequences。除了此处的其他指导,您还可以使用

SELECT setval('product_id_seq ', 10000); -- Next nextval() returns 10001

答案 2 :(得分: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)
相关问题