Re: [pgbr-geral] ALTER SEQUENCE foo START no 8.3.11 - bug?

2010-09-02 Por tôpico Euler Taveira de Oliveira
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?

2010-08-31 Por tôpico Alexsander Rosa
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?

2010-08-27 Por tôpico Alexsander Rosa
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?

2010-08-27 Por tôpico Alexsander Rosa
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?

2010-08-27 Por tôpico Alexsander Rosa
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?

2010-08-26 Por tôpico Alexsander Rosa
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-08-26 Por tôpico Marcelo Costa
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