Re: TCL trigger doesn't work after deleting a column

Поиск
Список
Период
Сортировка
От Josué Maldonado
Тема Re: TCL trigger doesn't work after deleting a column
Дата
Msg-id 3F574BD6.8080002@lamundial.hn
обсуждение исходный текст
Ответ на Re: TCL trigger doesn't work after deleting a column  (Tom Lane <tgl@sss.pgh.pa.us>)
Ответы Re: TCL trigger doesn't work after deleting a column
Список pgsql-general
Hi Tom,

Tom Lane wrote:
> =?ISO-8859-1?Q?Josu=E9_Maldonado?= <josue@lamundial.hn> writes:
>
>>Noticed that the loop does not go through all fields:
>
>
> Hard to believe.  Could you give us a complete example, not a partial
> one?

This is the code in the trigger function:

-- Function: public.audit_log()

-- DROP FUNCTION public.audit_log();

CREATE OR REPLACE FUNCTION public.audit_log()
   RETURNS trigger AS
'
  elog NOTICE "Inicio: "
if {[string match $TG_op UPDATE]} {
   foreach id [array names OLD] {
    #if { $OLD($id) != $NEW($id) } {
       elog NOTICE "ID tiene $id)"
       elog NOTICE "OLD tiene $OLD($id)"
       elog NOTICE "NEW tiene $NEW($id)"
       # tcl says $NEW(duser) does not exist
       # elog NOTICE "USER tiene $NEW(duser)"
       set lcsql "insert into audit (accion, campo, oldval, newval,
tabla, usuario ) "
       #append lcsql "values
(\'UPD\',\'$id\',\'$OLD($id)\'::text,\'$NEW($id)\'::text,\'$1\',\'$NEW(duser)\')"

    #spi_exec "$lcsql"
    #}
    }
}

if {[string match $TG_op INSERT]} {
   foreach id [array names NEW] {
     if { [info exists NEW($id)] } {
            set lcsql "insert into audit (accion, campo, newval, tabla,
usuario ) "
    append lcsql "values
(\'INS\',\'$id\',\'$NEW($id)\',\'$1\',\'$NEW(duser)\')"
    spi_exec "$lcsql"
     }
   }
}

if {[string match $TG_op DELETE]} {

   foreach id [array names OLD] {
     if { [info exists OLD($id)] } {
    set lcsql "insert into audit (accion, campo, oldval, tabla, usuario ) "
    append lcsql "values
(\'DEL\',\'$id\',\'$OLD($id)\',\'$1\',\'$OLD(duser)\')"
    spi_exec "$lcsql"
    return [array get OLD]
     }
   }
}
return [array get NEW]
' LANGUAGE 'pltcl' VOLATILE;


And this is the way a defined the trigger in my table

-- Trigger: tinv_auditor on public.tinv

-- DROP TRIGGER tinv_auditor ON public.tinv;

CREATE TRIGGER tinv_auditor
   AFTER INSERT OR UPDATE OR DELETE
   ON public.tinv
   FOR EACH ROW
   EXECUTE PROCEDURE public.audit_log('tinv');

Thanks,



В списке pgsql-general по дате отправления:

Предыдущее
От: Csaba Nagy
Дата:
Сообщение: Re: Replaceing records
Следующее
От: "Edwin Quijada"
Дата:
Сообщение: IP from conexion