Explicando em mais detalhes:

Na versão 8.3 o comando ALTER SEQUENCE tem uma cláusula não-documentada
START que é, na verdade, apenas um "alias" para RESTART. Ambos exigem um
parâmetro, que é o número para o qual a sequence será "reiniciada", e
portanto equivalem a um SELECT setval('foo', valor). Cabe lembrar que a
documentação da versão 8.3 [1] não menciona o START.

Na versão 8.4 isto foi modificado: a cláusula START do ALTER SEQUENCE passou
a modificar o valor do "START WITH" da sequence, ou seja, o valor que a
sequence vai assumir se for executado um RESTART sem parâmetros (o
parâmetro, que era obrigatório na 8.3, é opcional na 8.4). Este comando,
conforme a documentação da versão 8.4 [2], não modifica o valor da sequence,
apenas configura um futuro RESTART da mesma.

Eu descobri isto rodando um ALTER SEQUENCE ... START em vários servidores
replicados (com versões 8.4 e 8.3), para deixar as bases 100% iguais. Eu
achava que nos servidores 8.3, onde segundo a documentação o START não
existe, daria apenas uma mensagem de erro. Fiquei surpreso ao ver que o
START é um alias para RESTART.

Na minha opinião este comportamento da 8.3 é um bug -- talvez um bug
conhecido. Aparentemente o START WITH está sendo interpretado como RESTART
WITH por engano.

[1] http://www.postgresql.org/docs/8.3/static/sql-altersequence.html
[2] http://www.postgresql.org/docs/8.4/static/sql-altersequence.html

Em 27 de agosto de 2010 10:12, Alexsander Rosa
<[email protected]>escreveu:

> Se você reparar, o START mudou o valor da sequence, o que não deveria ter
> acontecido.
>
> Em 26 de agosto de 2010 23:20, Marcelo Costa 
> <[email protected]>escreveu:
>
>>
>>
>> 2010/8/26 Alexsander Rosa <[email protected]>
>>
>> Conversando no canal #postgresql eu descobri que a versão 8.3 tem, sim, o
>>> START -- então aparentemente isto é um BUG mesmo. A documentação online do
>>> 8.3 não mostra o comando, mas ele é suportado. Talvez por isto ninguém tenha
>>> visto ainda este bug. Estou conversando com o pessoal pra ver se faço um bug
>>> report, mas fica o recado.
>>>
>>
>> Não vi o BUG que vc relatou a única coisa que detectei é que o manual não
>> cita o START na versão 8.3.
>>
>> Testei num 8.3.9 e funcionou normalmente
>>
>> # create table teste (id serial, nome varchar(50), data_nascimento date);
>> NOTICE:  CREATE TABLE will create implicit sequence "teste_id_seq" for
>> serial column "teste.id"
>> CREATE TABLE
>>
>>
>> # select * from teste_id_seq;
>>  sequence_name | last_value | increment_by |      max_value      |
>> min_value | cache_value | log_cnt | is_cycled | is_called
>>
>> ---------------+------------+--------------+---------------------+-----------+-------------+---------+-----------+-----------
>>  teste_id_seq  |          1 |            1 | 9223372036854775807 |
>> 1 |           1 |       1 | f         | f
>> (1 row)
>>
>> # alter SEQUENCE teste_id_seq start 2000;
>> ALTER SEQUENCE
>>
>> # select * from teste_id_seq;
>>  sequence_name | last_value | increment_by |      max_value      |
>> min_value | cache_value | log_cnt | is_cycled | is_called
>>
>> ---------------+------------+--------------+---------------------+-----------+-------------+---------+-----------+-----------
>>  teste_id_seq  |       2000 |            1 | 9223372036854775807 |
>> 1 |           1 |       1 | f         | f
>> (1 row)
>>
>>
>> # alter SEQUENCE teste_id_seq restart 1;
>> ALTER SEQUENCE
>>
>> # select * from teste_id_seq;
>>  sequence_name | last_value | increment_by |      max_value      |
>> min_value | cache_value | log_cnt | is_cycled | is_called
>>
>> ---------------+------------+--------------+---------------------+-----------+-------------+---------+-----------+-----------
>>  teste_id_seq  |          1 |            1 | 9223372036854775807 |
>> 1 |           1 |       1 | f         | f
>> (1 row)
>>
>> --
>> Marcelo Costa
>>
>
-- 
Atenciosamente,
Alexsander da Rosa
Linux User #113925

"Extremismo na defesa da liberdade não é defeito.
Moderação na busca por justiça não é virtude."
-- Barry Goldwater
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a