Alternately, you might be able to use a custom GUC from a rather smaller PL/PgSQL function. At transaction start, issue:
set_config('myapp.trigger_time', '', 't');
This is problem with using custom GUC - clearing variable at transaction start. Without clearing it's not sufficient solution (see my response to Pavel's mail). I don't want to do clearing from application and as far as i know there is not "transaction start" trigger.
I think you can do it by using 2 GUCs.
Put this at the beginning of your trigger:
if current_setting(my_var.now) != now() then -- We're executing this code for the first time in this transaction set_config(my_var.now, now()) set_config(my_var.my_ts, clock_timestamp) end; -- Go on happily use my_var.my_ts to stamp your data.