2008/7/11 Mr J.L. <[EMAIL PROTECTED]>:

> Euler,
>  create table foo (a text, b text, c text, check( (a <> b and  b <> c and a
> <> c) ));
>
> fiz alguns teste e o check acima deu certo, parece que atendeu a questao.
> Agora o problema é que existem milhares de registros que deveriam ser
> alterados p/ que esse check tenha efeito (p/ nao dar erro na criacao do
> check).
>
> Creio que no postgresql nao tem uma opcao igual tem no "oracle" que um
> check pode ser criado e só serao afetados os registros apartir da criacao.
> Se tivesse isso iria ser show em!


      Ter não tem, mas se seus registros tiverem um *timestamp *é só
acrescentar mais isso no check... ;)
Ex.:

 CREATE TABLE foo (a text, b text, c text, d DATE NOT NULL DEFAULT now()
check( d < '2008-07-11'::date OR((a <> b and  b <> c and a <> c) ));



>
>
> mas desde ja, agradeço a ajuda.
>
>
> --- Em sex, 11/7/08, Euler Taveira de Oliveira <[EMAIL PROTECTED]>
> escreveu:
>
> > De: Euler Taveira de Oliveira <[EMAIL PROTECTED]>
> > Assunto: Re: [pgbr-geral] duvidas trigger
> > Para: [EMAIL PROTECTED], "Comunidade PostgreSQL Brasileira" <
> pgbr-geral@listas.postgresql.org.br>
> > Data: Sexta-feira, 11 de Julho de 2008, 11:35
> > Mr J.L. wrote:
> >
> > >    Em uma tabela tenho uns 10 campos, mas desses, 3
> > campos text nao podem ter o mesmo conteudo, porem, os tres
> > campos podem ser nulos.
> > >    Qual seria a melhor estrategia, CHECK OU TRIGGER?
> > (tentei criar um check mas acho q faltou criatividade p/
> > conseguir a solucao ou nao é possivel mesmo)
> > >    Caso a melhor opcao seja a trigger, estou usando
> > "TCL", qual seria o retorno correto p/ nao
> > executar o "UPDATE" ou "INSERT".
> > >
> > O aconselhável para um teste trivial como esse seria o uso
> > do CHECK [1].
> >   Vale ressaltar que 'true' e 'unknown'
> > fazem com que a avaliação da
> > expressão tenha sucesso (último caso).
> >
> > test=# create table foo (a text, b text, c text, check(a
> > <> b OR b <> c));
> > CREATE TABLE
> > test=# insert into foo (a,b,c) values('bar',
> > 'bat', 'baz');
> > INSERT 0 1
> > test=# insert into foo (a,b,c) values('bar',
> > 'bar', 'bar');
> > ERRO:  novo registro da relação "foo" viola
> > restrição de verificação
> > "foo_check"
> > test=# insert into foo (a,b,c) values('bar',
> > 'bar', 'baz');
> > INSERT 0 1
> > test=# insert into foo (a,b,c) values('bar',
> > 'bar', null);
> > INSERT 0 1
> >
> >
> > [1]
> > http://www.postgresql.org/docs/8.3/static/sql-createtable.html
> >
> >
> > --
> >    Euler Taveira de Oliveira
> >    http://www.timbira.com/
>
>
>       Novos endereços, o Yahoo! que você conhece. Crie um email novo com a
> sua cara @ymail.com ou @rocketmail.com.
> http://br.new.mail.yahoo.com/addresses
> _______________________________________________
> pgbr-geral mailing list
> pgbr-geral@listas.postgresql.org.br
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>



-- 
William Leite Araújo
Analista de Banco de Dados - QualiConsult
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a