As tabelas de um modo geral seguem uma ordem lógica quando falamos de seus atributos (campos), por exemplo, em uma tabela de produtos é comum termos o atributo qtd após o nome. Mas nem sempre nos deparamos com estruturas assim, e ai, como alterar a estrutura de forma fácil, e o mais importante, sem perder os dados ali já registrados?
Propomos então o seguinte cenário:
create tableproduto( id_produto bigintnot null auto_increment, qtdint not null default0, nomevarchar(50),primary key(id_produto) );
insert intoproduto (id_produto, qtd, nome)values(null,10,'Produto A'), (null,20,'Produto B'), (null,30,'Produto C') ;
Consultando os dados registrados:
select*fromproduto ;
id_produto qtd nome
———- —— ———–
1 10 Produto A
2 20 Produto B
3 30 Produto C
Vamos alterar a posição do atributo qtd, deixando-o após o nome:
altertableproduto changecolumnnome nomevarchar(50)null default null afterid_produto ;
Feito a alteração, vamos consultar o resultado realizando um novo select na tabela:
select*fromproduto ;
id_produto nome qtd
———- ——— ——–
1 Produto A 10
2 Produto B 20
3 Produto C 30
Veja que nosso objetivo foi alcançado com sucesso, o campo esta na posição desejada e, os dados permanecem da mesma forma antes da alteração.
Explicando um ponto que pode deixar dúvidas é, o motivo do campo nome ter sido especificado duas vezes é devido ao fato da sintaxe ser:
CHANGE [COLUMN] old_col_name new_col_name
Traduzindo, o nome do campo antigo (atual) e nome do novo campo, caso seja necessário renomeá-lo.

No Postgres tem como fazer isso ?
Se for possível passe as instruções por favor.
Excelente artigo.
Olá "Anônimo",
Este é um assunto que já foi alvo de algumas discussões pela web, te adiantando, não é possível realizar no PostgreSQL a mesma ação que exemplifiquei neste artigo, a alternativa é:
"Se ainda não estiver satisfeito pois quer suas tabelas "bonitinhas" e organizadas:
1. CREATE TABLE novo_nome AS SELECT id,cpf,nome FROM sua_tabela;
2. DROP TABLE sua_tabela;
3. ALTER TABLE novo_nome RENAME TO sua_tabela;
Osvaldo (Na lista PostgreSQL-Brasil)."
Veja mais sobre o assunto em:
http://pt.wikibooks.org/wiki/PostgreSQL_Pr%C3%A1tico/Ap%C3%AAndices/Dicas_Pr%C3%A1ticas_de_uso_do_SQL
http://wiki.postgresql.org/wiki/Alter_column_position
Espero ter ajudado, grande abraço.