システムのカスタマイズなどを行う場合にまずそのシステムがどのように動いているのか調査する必要がある。
でもDB回りの調査時にアクションに対応するテーブルを調べるのにソースを全て追うのは厳しい。
そこで前テーブルにトリガーを作成して変更があったテーブルをログテーブルに書き出すようにしてみた。
※今回はPostgreSQLの例です。
まずログテーブルを作成する。
CREATE TABLE all_log (
table_name text NOT NULL,
dodate timestamp without time zone,
action text NOT NULL);
上記はテーブル名、日時、アクション(update等)だけを記録するテーブル。
次にトリガー関数を作成。
CREATE OR REPLACE FUNCTION public.test()
RETURNS "trigger" AS '
begin
insert into all_log(table_name,action,dodate) values (tg_relname,tg_op,now());
return new;
end;
'
language 'plpgsql' VOLATILE;
関数を登録したら全テーブルにトリガーを作成。
CREATE TRIGGER tri_log
before INSERT OR UPDATE OR DELETE
ON テーブル名
FOR EACH STATEMENT
EXECUTE PROCEDURE public.test();
これで対象システムのアクションを実行すれば変更があったテーブルの調査が可能。
調査後にログテーブル、トリガー、トリガー関数を削除するの忘れないように!