Meu muito obrigado a todos!
A quem interessar segue função PL/ruby para gravar logs.
CREATE OR REPLACE FUNCTION logging.grava_log()
RETURNS "trigger" AS
# SQL para pegar o nome do schema qual faz parte a tabela que disparou a
trigger
sql = "SELECT tb.schemaname AS schema FROM pg_stat_all_tables tb WHERE
tb.relid = " + tg["relid"];
dscschema = (PLruby.exec(sql))[0]["schema"]
# Chave primaria da tabela (Sempre ocupa a posição zero)
dscpk = tg["relatts"][0]
# Attributes - Colunas ba tabela que disparou a trigger
attrs = tg["relatts"]
case tg["op"]
when PL::INSERT
# Não implementado
when PL::UPDATE
# Loop para pegar cada coluna da tabela
for i in 0...attrs.length
# Coluna da tabela
dsccolumn = attrs[i]
# Virificação para inserir apenas as colunas que sofrerão alteração
if old[dsccolumn] != new[dsccolumn]
$Plans["plan"] = PL::Plan.new(
"INSERT INTO logging.logs SELECT
nextval('logging.logs_codlogs_seq'::regclass), $1, $2, $3, $4, $5, $6, $7,
now(), user", ["text","text","text","text","text","int4","text"]).save
n = $Plans["plan"].exec([dscschema, tg["relname"], dsccolumn,
old[dsccolumn], new[dsccolumn], old[dscpk], "UPDATE"], 1)
end
end
# valor de retorno
return PL::OK
when PL::DELETE
# Não implementado
else
return PL::OK
end
LANGUAGE 'plruby';
ALTER FUNCTION logging.grava_log() OWNER TO administrador;
abçs!
Em 18 de novembro de 2011 15:51, Juliano Benvenuto Piovezan <
[email protected]> escreveu:
> 2011/11/18 Deusimar Ferreira <[email protected]>:
> > Dickson,
> > O sistema é Linux(CentOS) na versão do banco é 8.2. Tá dando uma exceção
> não
> > recuperável.
> > Leonardo,
> > Seu post me deu uma direção vou usar o PL/ruby, tinha imaginado que
> PL/PGSQL
> > não daria suporte para esta necessidade. valeu!
> >
> > Muito obrigado as vocês pela colaboração, abçs.
> >
>
> Ou você poderia aproveitar pra atualizar a versão e utilizar o EXECUTE
> com USING, presente desde a versão 8.4 [1].
>
> [1]
> http://www.postgresql.org/docs/8.4/static/plpgsql-statements.html#PLPGSQL-STATEMENTS-EXECUTING-DYN
> _______________________________________________
> pgbr-geral mailing list
> [email protected]
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
--
Deusimar Ferreira - +55 61 9162 8928 +55 61 2020 0853 +55 61 3388 6975
Analista de Sistemas/Desenvolvedor
CGMI/MDA
"Sem Ele eu não sou nada, mas com Ele eu posso todas as coisas através de
Jesus Cristo, que me fortalece" (Filipenses 4:13)
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral