2011-04-06 38 views
8

Estoy intentando cambiar el valor mínimo de una secuencia existente.Cambiar el valor mínimo de la secuencia de Postgres

Primero probé

ALTER SEQUENCE product_id_seq MINVALUE 10000; 

y me dieron ERROR: START value (1) cannot be less than MINVALUE (10000).

así que traté

ALTER SEQUENCE product_id_seq MINVALUE 10000 RESTART WITH 10000; 

pero tiene el mismo error.

Por supuesto, podría simplemente dejarlo caer y crear uno nuevo, pero creo que debería haber una forma de hacerlo. Estoy usando Postgres 8.4.7.

Respuesta

7

Cómo acerca de la configuración them all a la vez:

ALTER SEQUENCE product_id_seq 
MINVALUE 10000 
START 10000 
RESTART 10000; 

que debería cambiar el mínimo, de partida, y los valores actuales de todos a 10.000 y por lo tanto hacer que todo sea consistente.

+0

Gracias. No sé cómo me perdí ese parámetro. =) – dasony

+1

@dasony: Posiblemente la extraña denominación de 'RESTART' causó cierta confusión, hubiera esperado que se llamara 'CURRENT'. –

0

He hecho la siguiente prueba, Mi versión es 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 tiene varios functions that operate on sequences. Además de la otra guía aquí, puede usar

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