[PostgreSQL-Brasil] Alter table com campo default

Rudinei Dias rudinei em ipuc.com.br
Quinta Abril 26 13:58:18 UTC 2007


Leandro,
*1) Como é criado o atributo null que você mencionou no email anterior? 
Como atribuir o valor por omissão?
*>> Mas você pode criar o atributo NULL, e depois atribuir um valor por 
omissão.

=========================================================================================
*2) Outra coisa é que eu estava questionando a forma como a criação de 
um campo com default se comporta.
*Conforme os testes que realizei abaixo, um alter table adicionando 
coluna com default atualiza todos os registros anteriormente criados, 
enquanto a alteração de uma coluna setando um default não.
o teste:
 create table testdefault (id int4 not null primary key, nome 
varchar(20) not null );

 insert into testdefault values (1,'q');
 insert into testdefault values (2,'w');
 insert into testdefault values (3,'e');

 select * from testdefault;
 id | nome
----+------
  1 | q
  2 | w
  3 | e
(3 registros)

 alter table testdefault add novacoluna char(1) default 'U';
* -- este comando atualizou todos os registros anteriores
*
 select * from testdefault;
 id | nome | novacoluna
----+------+------------
  1 | q    | U
  2 | w    | U
  3 | e    | U
(3 registros)


 alter table testdefault drop column novacoluna char(1);

 alter table testdefault alter novacoluna set default 'U';
* -- este comando não atualizou os registros anteriores
*
 select * from testdefault;
 id | nome | novacoluna
----+------+------------
  1 | q    |
  2 | w    |
  3 | e    |
(3 registros)

*** Isto resolve meu problema.

=========================================================================================
*3) sobre as questões
*

>>Por padrão quando você atribui um dafault a um campo, o pg atualiza  todos os registros da tabela que estão null para o valor default.

>	O que é correto, só nos novos atributos.

>> No Oracle, para você me entender, o valor default só é atribuído para os 
novos registros a partir da alteração da estrutura da tabela.

> O que é estranho, concorda?

... criando polêmica... mas estamos aqui para discutir mesmo!!!
Na verdade não concordo. Como que o PG pode pressupor que o valor 
default deve valer para todos os registros preexistentes, se uma tabela 
é uma abstração de um conjunto de elementos de propriedades variáveis 
definidas por uma aplicação genérica? Imagine uma tabela que armazene as 
propriedades das frutas. Num determinado momento precisa-se adicionar 
uma coluna com a cor da fruta e o campo vai com o default 'AZUL', então 
a cor de todas as minhas frutas passariam a ser azul! bananas azuis, 
abacaxis azuis, melões azuis! Pressupor para o passada é algo perigoso, 
e o mais lógico é que o valor dos campos anteriores precisarem ser 
atualizados com um valor correto, mas não predifinido com um valor 
incorreto.
O que vocês acham?

-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: http://pgfoundry.org/pipermail/brasil-usuarios/attachments/20070426/5d878f10/attachment.html 


Mais detalhes sobre a lista de discussão Brasil-Usuarios