On Mon, Sep 14, 2009 at 1:01 PM, Jean Domingues <[email protected]>wrote:
>
> Pessoal, estou usando a função abaixo para chamar de triggers no after
> insert, update e delete das tabelas que desejo fazer logging. Ta
> funcionando
>
Por que colocaste "C" no assunto do e-mail, se o que tu queres mesmo é Tcl?
São duas linguagens bem diferentes.
> ok para todas as tabelas, exceto para uma, para a qual recebe a mensagem de
> que não foi possível encontrar o campo "tgname". Segue tambem abaixo a
> definição da tabela para a qual o trigger não funciona. Se alguém tiver uma
> luz, da um toque ai.
>
Se eu fosse você não usaria essa função em PL/Tcl. Vai ser muito mais lento
fazer isso em Tcl do que em C, e provavelmente do que em PL/pgSQL.
O tablelog [1] é escrito em C, mas precisarias instalar o módulo em C e
habilitá-lo no teu banco, conforme as instruções.
Já reescrever em PL/pgSQL seria relativamente fácil, e não precisa de nenhum
módulo C.
> CREATE OR REPLACE FUNCTION "public"."log_to_audit_table" () RETURNS trigger
> AS
> $body$
> spi_exec "SELECT CURRENT_USER AS tguser"
> spi_exec "SELECT relname AS tgname FROM pg_class WHERE relfilenode =
> $TG_relid"
>
> #skip changes on audit_table
> if {[string equal -nocase $tgname audit_table]} { return OK } //creio que
> o erro seja aqui.
>
Execute essa consulta para essa tabela que está com problema e nos diga o
resultado:
SELECT relname FROM pg_class where relfilenode =
'nomedatabelaquedáproblema';
Roberto
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral