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
