]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/src/sql/Pg/900.audit-tables.sql
f7e14e8e0fffc27ec57573976e130a949fe8299f
[working/Evergreen.git] / Open-ILS / src / sql / Pg / 900.audit-tables.sql
1 DROP SCHEMA auditor CASCADE;
2
3 BEGIN;
4
5 CREATE SCHEMA auditor;
6
7 CREATE FUNCTION auditor.create_auditor ( sch TEXT, tbl TEXT ) RETURNS BOOL AS $creator$
8 BEGIN
9         EXECUTE $$
10                         CREATE TABLE auditor.$$ || sch || $$_$$ || tbl || $$_history (
11                                 audit_time      TIMESTAMP WITH TIME ZONE        NOT NULL,
12                                 audit_action    CHAR(1)                         NOT NULL,
13                                 LIKE $$ || sch || $$.$$ || tbl || $$
14                         );
15         $$;
16
17         EXECUTE $$
18                         CREATE FUNCTION auditor.audit_$$ || sch || $$_$$ || tbl || $$_func ()
19                         RETURNS TRIGGER AS $func$
20                         BEGIN
21                                 INSERT INTO auditor.$$ || sch || $$_$$ || tbl || $$_history
22                                         SELECT now(), SUBSTR(TG_OP,1,1), OLD.*;
23                                 RETURN NULL;
24                         END;
25                         $func$ LANGUAGE 'plpgsql';
26         $$;
27
28         EXECUTE $$
29                         CREATE TRIGGER audit_$$ || sch || $$_$$ || tbl || $$_update_trigger
30                                 AFTER UPDATE OR DELETE ON $$ || sch || $$.$$ || tbl || $$ FOR EACH ROW
31                                 EXECUTE PROCEDURE auditor.audit_$$ || sch || $$_$$ || tbl || $$_func ();
32         $$;
33         RETURN TRUE;
34 END;
35 $creator$ LANGUAGE 'plpgsql';
36
37 SELECT auditor.create_auditor ( 'actor', 'usr' );
38 SELECT auditor.create_auditor ( 'biblio', 'record_entry' );
39 SELECT auditor.create_auditor ( 'asset', 'copy' );
40
41 COMMIT;
42