Olá, Em 19 de abril de 2010 15:38, Wagner Santos <[email protected]>escreveu:
> 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; > Você vai ter que usar SQL dinâmico para fazer isso. A variável que pega o nome da tabela é TG_TABLE_NAME. > > É 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? > Como você identifica o registro que está sendo alterado? Esta é a condição que você deve colocar 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 > > []s -- JotaComm http://jotacomm.wordpress.com
_______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
