Ribamar Sousa escreveu:
> 2008/6/20 William Leite Araújo <[EMAIL PROTECTED] 
> <mailto:[EMAIL PROTECTED]>>:
> 
>     2008/6/19 Ribamar Sousa <[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>>:
> 
>         (...)
> 
>         Acredito que o texto do manual, e como também relatam em alguns
>         livros, talvez precise ser mais claro.
>         Sei que muita gente não procura testar estas coisas, mas o que
>         eu entendi ao ler foi que ao executar simultâneos selects eu
>         receberia os registros em ordem aleatória.
> 
>      
>          O que houve foi um equívoco em sua interpretação. Caso você
>     execute simultâneos "SELECT's", pode ser que eles sejam retornados
>     em ordem, mas não é garantido esse retorno sempre. Pode ocorrer
>     troca de ordem, como de fato ocorre ao se alterar alguma coisa na tupla.
> 
> 
> Willian, sem querer ter razão na marra, mas apenas me justificando. Veja 
> o texto do manual:
> 
> "Quando a tabela é lida, as linhas aparecem em uma ordem aleatória, a 
> não ser que a classificação seja requisitada explicitamente."
> 
> Mas este longo debate foi muito proveitoso e percebo que a coisa não é 
> assim, pois caso tenha havido alguma alteração isso sim, alterará a 
> ordem. Mas acredito que o texto deveria citar que, caso não haja 
> alteração a ordem será sempre a mesma. Veja o parágrafo completo:
> 
> "Uma tabela em um banco de dados relacional é muito semelhante a uma 
> tabela no papel: é formada por linhas e colunas. O número e a ordem das 
> colunas são fixos, e cada coluna possui um nome. O número de linhas é 
> variável, refletindo a quantidade de dados armazenados em um determinado 
> instante. O padrão SQL não dá nenhuma garantia sobre a ordem das linhas 
> na tabela. Quando a tabela é lida, as linhas aparecem em uma ordem 
> aleatória, a não ser que a classificação seja requisitada 
> explicitamente. Esta parte é descrita no Capítulo 7 
> <http://pgdocptbr.sourceforge.net/pg80/queries.html>. Além disso, o SQL 
> não atribui identificadores únicos para as linhas e, portanto, é 
> possível existirem várias linhas totalmente idênticas na tabela. Isto é 
> uma conseqüência do modelo matemático subjacente ao SQL, mas geralmente 
> não é desejável. Mais adiante neste capítulo será mostrado como lidar 
> com esta questão."
> http://pgdocptbr.sourceforge.net/pg80/ddl.html#DDL-BASICS
>  
> 


Creio que o que você deseja é obtido acrescentando um ORDER BY 
random() ao final de seu SELECT.

Aí sim diferentes execuções retornarão com variação na ordem dos 
registros, mesmo que o banco não tenha sofrido qualquer alteração.

Osvaldo
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a