このテーブルを使用するプログラムがありますが、プログラムを変更せずにロギングにいくつかのアドインを追加したいと思います。
groups
------
id bigint not null
name character varying(100) not null
users
-----
id bigint not null
name character varying(100) not null
users_groups
------------
group_id bigint not null
user_id bigint not null
ユーザーがグループに追加または削除されるたびに、syslog6に「group456に追加されたuser123」または「group456から削除されたuser123」メッセージを書きたいと思います。
私の最初の考えはPostgreSQLトリガーを使用することでした。
CREATE OR REPLACE FUNCTION process_ext_audit()
RETURNS trigger AS $ext_audit$
BEGIN
IF (TG_OP = 'DELETE') THEN
SELECT name
into uname
FROM users
WHERE id = OLD.user_id;
SELECT name
into gname
FROM groups
WHERE id = OLD.group_id;
-- write into local6: "uname removed from gname"
ELSIF (TG_OP = 'INSERT') THEN
SELECT name
into uname
FROM users
WHERE id = NEW.user_id;
SELECT name
into gname
FROM groups
WHERE id = NEW.group_id;
-- write into local6: "uname added to gname"
END IF;
RETURN NULL;
END;
$ext_audit$ LANGUAGE plpgsql;
CREATE TRIGGER ext_audit
AFTER INSERT OR DELETE ON users_groups
FOR EACH ROW EXECUTE PROCEDURE process_ext_audit();
私のやり方は良いですか?それでは、この関数はsyslogにどのように記録しますか?
私はrsyslogを使用してCentOS 7でpostgresql 9.2を使用しています。
ベストアンサー1
ロギングを正しく設定した場合(オプションを参照)18.8.2. When To Log.
PostgreSQL:ドキュメント:9.1:エラー報告とログ記録postgresql.org |)そしてログターゲットがsyslogの場合は、それを使用してRAISE
何かを記録できます。詳細はこちらからご覧いただけます。PostgreSQL:ドキュメント:8.3:エラーとメッセージpostgresql.org |