create or replace function trigger_f() returns trigger as $$ declare old_id integer := null; old_name text := null; new_id integer := null; new_name text := null; begin if tg_op in('INSERT', 'UPDATE') then new_id := new.id; new_name := new.name; end if; if tg_op in('UPDATE', 'DELETE') then old_id := old.id; old_name := old.name; end if; insert into log values( tg_op, old_id, old_name, new_id, new_name, current_user, current_timestamp ); return new; end; $$ language plpgsql;