Re: [pgbr-geral] ALTER SEQUENCE foo START no 8.3.11 - bug?
Alexsander Rosa escreveu: Só eu achei que isto é um bug -- e perigoso? Hmmm... Se não está documentado, acho que é uma correção de baixa prioridade. De todo modo, a prevenção (aka correção) é bastante simples (não testei) e está em anexo. -- Euler Taveira de Oliveira http://www.timbira.com/ Index: src/backend/commands/sequence.c === RCS file: /a/pgsql/dev/anoncvs/pgsql/src/backend/commands/sequence.c,v retrieving revision 1.149 diff -c -r1.149 sequence.c *** src/backend/commands/sequence.c 1 Jan 2008 19:45:49 - 1.149 --- src/backend/commands/sequence.c 1 Sep 2010 14:02:34 - *** *** 991,996 --- 991,1002 errmsg(conflicting or redundant options))); increment_by = defel; } + else if (!isInit strcmp(defel-defname, start) == 0) + { + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg(START option is not implemented))); + } /* * start is for a new sequence restart is for alter ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] ALTER SEQUENCE foo START no 8.3.11 - bug?
Só eu achei que isto é um bug -- e perigoso? - Se você der um ALTER SEQUENCE ... START N num servidor 8.4 o valor da sequence NÃO é alterado. Este comando apenas altera o valor inicial para o qual a sequence será resetada se for dado um RESTART sem parâmetros. - Se você der um ALTER SEQUENCE ... START N num servidor 8.x (com x 4), o valor é ALTERADO !!! Por um erro de implementação, o servidor vai executar um RESTART, resetando a sequence para o valor informado. Esta cláusula não existe nas versões 8.x antes da 8.4, mas ao invés do comando dar um ERRO ele executa OUTRO comando!!! Em 27 de agosto de 2010 12:27, Alexsander Rosa alexsander.r...@gmail.comescreveu: Comentário do Tom Lane sobre o problema: http://archives.postgresql.org/pgsql-bugs/2010-08/msg00349.php -- 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 pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] ALTER SEQUENCE foo START no 8.3.11 - bug?
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 marcelojsco...@gmail.comescreveu: 2010/8/26 Alexsander Rosa alexsander.r...@gmail.com 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 ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral -- 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 pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] ALTER SEQUENCE foo START no 8.3.11 - bug?
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 alexsander.r...@gmail.comescreveu: 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 marcelojsco...@gmail.comescreveu: 2010/8/26 Alexsander Rosa alexsander.r...@gmail.com 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 pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] ALTER SEQUENCE foo START no 8.3.11 - bug?
Comentário do Tom Lane sobre o problema: http://archives.postgresql.org/pgsql-bugs/2010-08/msg00349.php -- 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 pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] ALTER SEQUENCE foo START no 8.3.11 - bug?
O PostgreSQL 8.4 suporta os comandos ALTER SEQUENCE ... START e RESTART: http://www.postgresql.org/docs/8.4/static/sql-altersequence.html O PostgreSQL 8.3 tem apenas o RESTART: http://www.postgresql.org/docs/8.3/static/sql-altersequence.html Em teoria, um comando ALTER SEQUENCE foo START no 8.3.11 deveria dar erro de sintaxe ou coisa parecida, certo? No entanto o servidor 8.3.11 não apenas ACEITOU o comando que não consta do manual, mas EXECUTOU ERRADO. Aparentemente ele interpretou como um RESTART e reiniciou a sequence! Isto não seria um bug? -- 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 pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] ALTER SEQUENCE foo START no 8.3.11 - bug?
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. Em 26 de agosto de 2010 15:58, Alexsander Rosa alexsander.r...@gmail.comescreveu: O PostgreSQL 8.4 suporta os comandos ALTER SEQUENCE ... START e RESTART: http://www.postgresql.org/docs/8.4/static/sql-altersequence.html O PostgreSQL 8.3 tem apenas o RESTART: http://www.postgresql.org/docs/8.3/static/sql-altersequence.html Em teoria, um comando ALTER SEQUENCE foo START no 8.3.11 deveria dar erro de sintaxe ou coisa parecida, certo? No entanto o servidor 8.3.11 não apenas ACEITOU o comando que não consta do manual, mas EXECUTOU ERRADO. Aparentemente ele interpretou como um RESTART e reiniciou a sequence! Isto não seria um bug? -- 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 -- 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 pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] ALTER SEQUENCE foo START no 8.3.11 - bug?
2010/8/26 Alexsander Rosa alexsander.r...@gmail.com 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 ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral