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.

-- 

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

Responder a