Em 07-02-2011 11:46, Marcelo Cardoso de Souza escreveu:
> Exemplo: Tenho um tabela com os campos id, campo1, campo2, campo3,
> ultimoCampo e quando dou select * ele traz os campos nesta mesma ordem.
> Eu preciso alterar a ordem dos campos na estrutura da tabela pois meu
> sistema exige que o ultimoCampo sempre seja o ultimo, mas se eu inserir
> um novo campo, o novo será o ultimo e isso não pode.
>
Na verdade o SQL não garante nem mesmo a ordem em que as colunas aparecem; 
isto é um detalhe de implementação. Aconselho a leitura do artigo "SELECT * is 
evil" [1] para reflexões sobre o uso do SELECT *. Basicamente alguns do 
problemas são:

(i) ineficiência: em uma tabela de 20 colunas você o utiliza mas precisa 
somente de 2 colunas. O problema será maior se algumas dessas colunas 
contiverem dados com alguns kB ou MB;
(ii) versionamento: se uma coluna muda de nome e você o utiliza, a consulta 
não apresentará um erro (que seria de fácil depuração);
(iii) ordem: se a ordem das colunas muda e você está utilizando alguma função 
baseada em posição (por exemplo, pg_fetch_result($res, 0, 3) -- quem é a 
coluna 3?), você pode estar recuperando o dado indesejado.

Resumindo, se você quer ter uma aplicação sem imprevistos, *nunca* utilize 
SELECT *, ao invés disso, gaste um tempo a mais escrevendo os nomes das 
colunas desejadas.

Marcelo, aconselho corrigir a sua aplicação para que não dependa da posição de 
colunas.

[1] http://www.parseerror.com/sql/select*isevil.html


-- 
   Euler Taveira de Oliveira
   http://www.timbira.com/
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a