PostgreSQLテーブルデータの変更をsyslogに記録するにはどうすればよいですか?

PostgreSQLテーブルデータの変更をsyslogに記録するにはどうすればよいですか?

このテーブルを使用するプログラムがありますが、プログラムを変更せずにロギングにいくつかのアドインを追加したいと思います。

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 |

おすすめ記事