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?

_______________________________________________
Grupo de Usuários do PostgreSQL no Brasil
Antes de perguntar consulte o manual
http://pgdocptbr.sourceforge.net/

Para editar suas opções ou sair da lista acesse a página da lista em:
http://pgfoundry.org/mailman/listinfo/brasil-usuarios

Responder a