Em 12/07/13, Douglas Fabiano Specht<[email protected]> escreveu:
> Em 12 de julho de 2013 11:47, Osvaldo Kussama
> <[email protected]>escreveu:
>
>> Em 12/07/13, Douglas Fabiano Specht<[email protected]> escreveu:
>> > Bom dia pessoal,
>> >
>> > estou com uma dificuldade para criar uma regra que não permite insert
>> > de
>> > linhas duplicadas.
>> > fiz um teste simples, criei uma tabela test e a regra, mas quando vou
>> > inserir mesmo sem ter nada na tabela ele ja me acusa o erro.
>> >
>> > a regra é simples, nao pode ter o tipoacesso e numero iguais..
>> > será que alguem teria alguma ideia?
>> >
>> >
>> > CREATE TABLE test
>> > (
>> >   chave integer,
>> >   tipoacesso character(1),
>> >   numero integer
>> > )
>> >
>> >
>> > create or replace rule protect_double as
>> >   on INSERT to test
>> >     where chave in(
>> > select res.chave from dah.test res
>> > where new.tipoacesso='R' and new.numero=res.numero)
>> >
>> >   do instead select erroDouble();
>> >
>> >
>> > CREATE OR REPLACE FUNCTION erroDouble() RETURNS VOID AS $$
>> > BEGIN
>> > RAISE EXCEPTION 'Numero Duplicada não permitido!!!';
>> > END;
>> > $$
>> > LANGUAGE plpgsql;
>> >
>> >
>> > testando o insert
>> > insert into test values(-5,'R', 1)
>> >
>>
>>
>> Não é mais simples criar um índice único nesta dupla de campos?
>> http://www.postgresql.org/docs/current/interactive/sql-createindex.html
>>
>> Osvaldo
>> _______________________________________________
>> pgbr-geral mailing list
>> [email protected]
>> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>>
>
> Osvaldo,
> Na verdade nao, pois em produção a regra é outra e envolve mais campos
> inclusive com null, com datas, etc.
> esse exemplo seria para testes de como funcionaria somente.
>


Então tente substituir o IN por EXISTS para evitar o problema com o NULL.

Osvaldo
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a