Obrigado pela ajuda de todos.
Baseado nos exemplos minha trigger seria algo parecido com :
-- Function: process_tb_audit()

-- DROP FUNCTION process_tb_audit();

CREATE OR REPLACE FUNCTION process_tb_audit()
  RETURNS trigger AS
$BODY$
    BEGIN
        --
        -- Create a row in emp_audit to reflect the operation performed on
emp,
        -- make use of the special variable TG_OP to work out the operation.
        --
        IF (TG_OP = 'DELETE') THEN
            INSERT INTO audit SELECT user, now(),OLD.gid;
            RETURN OLD;
        ELSIF (TG_OP = 'UPDATE') THEN
            INSERT INTO audit SELECT user, now(),NEW.gid;
            RETURN NEW;
        ELSIF (TG_OP = 'INSERT') THEN
            INSERT INTO audit SELECT user, now(),NEW.gid;
            RETURN NEW;
        END IF;
        RETURN NULL; -- result is ignored since this is an AFTER trigger
    END;
$BODY$
  LANGUAGE 'plpgsql' VOLATILE
  COST 100;
ALTER FUNCTION process_tb_audit() OWNER TO "admin";


Porém, algumas modificacoes são necessárias para que eu possa usá-la
corretamente:
Ao invés de: INSERT INTO audit SELECT user, now(),NEW.gid;

Gostaria de pegar o nome da tabela sendo alterada, por exemplo:
INSERT INTO $TABELA$ SELECT user, now(),NEW.gid;

É possivel?

Um outro detalhe, esse teste que estou fazendo está inserindo em uma outra
tabela (audit) gostaria de fazer um update na tabela atual com o nome de
usuario e a data, seria assim:
UPDATE $TABELA$ set usuario=SELECT user, set dataAlter= now() where ????

E o que eu coloco no where?

Obrigado!

----------
Wagner Santos
MSN/Gtalk: [email protected]
Site: http://www.geracaoelias.blog.br
meadiciona:http://meadiciona.com/wagnergsantos/


2010/4/19 Osvaldo Kussama <[email protected]>

> Em 19 de abril de 2010 14:43, Wagner Santos <[email protected]>
> escreveu:
> > Caros,
> > Nas minhas tabelas tem um campo com o nome de usuario para indicar quem
> fez
> > a ultima alteracao ou insercao na base.
> > Gostaria que quanto um uma determinada linha da tabela fosse alterada,
> essas
> > informações fossem gravadas na base.
> > Imagino que isso seja possível com uma trigger, mas como fazer?
> > Vou ter que criar uma trigger por tabela ou posso criar uma para todo o
> > banco?
> > Por ultimo, como pegar o nome do usuário logado no banco.
> > Obrigado,
> > ----------
>
>
> Dê uma olhada no exemplo 38-4 em:
> http://www.postgresql.org/docs/current/interactive/plpgsql-trigger.html
>
> Uma trigger é definida apenas para tabela, mas você pode ter a mesma
> função referenciada em diversas triggers.
>
> Quanto ao usuário logado, e outras coisas de interesse, veja:
> http://www.postgresql.org/docs/current/interactive/functions-info.html
>
> Osvaldo
> _______________________________________________
> pgbr-geral mailing list
> [email protected]
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a