我正在尝试更改现有序列的最小值。
首先我试过
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。
答案 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)