Изменение minvalue последовательности Postgres - PullRequest
8 голосов
/ 06 апреля 2011

Я пытаюсь изменить минимальное значение существующей последовательности.

Сначала я попытался

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 ]

8 голосов
/ 06 апреля 2011

Как насчет установки их всех одновременно:

ALTER SEQUENCE product_id_seq
MINVALUE 10000
START 10000
RESTART 10000;

Это должно изменить минимальные, начальные и текущие значения на 10000 и, таким образом, сделать все согласованным.

1 голос
/ 07 апреля 2011

PostgreSQL имеет несколько функций, которые работают с последовательностями .В дополнение к другим указаниям здесь вы можете использовать

SELECT setval('product_id_seq ', 10000); -- Next nextval() returns 10001
0 голосов
/ 06 апреля 2011

Я сделал следующий тест, Моя версия 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...