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 по дате отправления: