[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