create or replace package triggertest as function ts_insert_func () returns opaque as ' begin if new.ts_create isnull then new.ts_create := ''now''; end if; if new.ts_update isnull then new.ts_update := new.ts_create; end if; return new; end; ' language 'plpgsql' function ts_update_func() returns opaque as ' begin if new.ts_create isnull then new.ts_create := old.ts_create; end if; new.ts_update := ''now''; return new; end; ' language 'plpgsql'; -- -- create table numbers (ts_create timestamp, ts_update timestamp, a int4, b int4); -- create trigger ts_insert_trigger before insert on numbers for each row -- execute procedure triggertest.ts_insert_func(); -- create trigger ts_update_trigger before update on numbers for each row -- execute procedure triggertest.ts_update_func(); -- insert into numbers (a, b) values (3, 4); -- insert into numbers (a, b) values (3, 7); -- insert into numbers (a, b) values (5, 7); -- select * from numbers; -- update numbers set a = 4 where a = 3 and b = 7; -- select * from numbers;