| /*Region History*/ |
| CREATE TABLE IF NOT EXISTS REGION_HIST (HIST_ID serial, operation char(1), stamp timestamp, LIKE REGION EXCLUDING ALL); |
| |
| CREATE OR REPLACE FUNCTION process_region_audit() RETURNS TRIGGER AS $object_audit$ |
| BEGIN |
| -- |
| -- Create a row in public.region_hist_audit to reflect the operation performed on region, |
| -- making use of the special variable TG_OP to work out the operation. |
| -- |
| IF (TG_OP = 'DELETE') THEN |
| INSERT INTO public.region_hist SELECT nextval('region_hist_hist_id_seq'), 'D', now(), OLD.*; |
| ELSIF (TG_OP = 'UPDATE') THEN |
| INSERT INTO public.region_hist SELECT nextval('region_hist_hist_id_seq'), 'U', now(), NEW.*; |
| ELSIF (TG_OP = 'INSERT') THEN |
| INSERT INTO public.region_hist SELECT nextval('region_hist_hist_id_seq'), 'I', now(), NEW.*; |
| END IF; |
| RETURN NULL; -- result is ignored since this is an AFTER trigger |
| END; |
| $object_audit$ LANGUAGE plpgsql; |
| |
| DROP TRIGGER IF EXISTS region_audit on public.region; |
| CREATE TRIGGER region_audit |
| AFTER INSERT OR UPDATE OR DELETE ON public.region |
| FOR EACH ROW EXECUTE PROCEDURE process_region_audit(); |