Era isso, faltava o DELETE no CREATE TRIGGER, pondo assim:

CREATE TRIGGER trg_t_incendio
     AFTER INSERT OR UPDATE OR DELETE
     ON t_incendio
     FOR EACH ROW EXECUTE PROCEDURE fun_teste();

Já dispara nas três acções (INSERT, UPDATE e DELETE).

Adicionei esta parte à função para contemplar um UPDATE:

ELSIF (TG_OP = 'UPDATE') THEN
            DELETE FROM t_relatorio
                WHERE codigo = OLD.codigo;
            INSERT INTO t_relatorio(codigo,tipo,nome)
                (SELECT i.codigo, a.tipo, a.nome
                FROM t_incendio AS i, t_areaprotegida AS a
                WHERE (i.geom && a.geom) AND ST_Intersects(i.geom,a.geom)
                GROUP BY i.codigo, a.tipo, a.nome
                HAVING i.codigo = NEW.codigo);

Perfeito, obrigado pela vossa grande ajuda!

Att,

Eloi Ribeiro
GIS Analyst
39,45º -0,40º
flavors.me/eloiribeiro


No dia 26 de Março de 2012 17:42, Danilo Silva
<[email protected]>escreveu:

> A sua trigger somente é executa com ocorre insert ou update, do jeito que
> está nunca será executada para delete.
>
> Crie outra trigger para o evento de delete.
>
> Att.
>
> Danilo
>
> Em 26 de março de 2012 11:00, Eloi Ribeiro <[email protected]>escreveu:
>
>>  No INSERT a função dispara correctamente mas no DELETE já não, alguma
>> razão para isso?
>>
>> DELETE FROM t_incendio WHERE codigo=999999;
>> SELECT * FROM t_incendio;
>> --nada, ok
>>
>> SELECT * FROM t_relatorio;
>> 1;999999;"P. Natural";"Bosque" <- o 'trigger' não disparou para eliminar
>> o registo?
>>
>> Att,
>>
>>
>> Eloi Ribeiro
>> GIS Analyst
>> 39,45º -0,40º
>> flavors.me/eloiribeiro
>>
>>
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a