sql >> データベース >  >> RDS >> PostgreSQL

postgresqlでデータの変更をログに記録する方法は?

    非常に一般的なトリガー関数があります: https://www。 cybertec-postgresql.com/en/tracking-changes-in-postgresql/

    履歴を保存するテーブル:

    CREATE SCHEMA logging;
    CREATE TABLE logging.t_history (
            id             serial,
            tstamp         timestamp DEFAULT now(),
            schemaname     text,
            tabname        text,
            operation      text,
            who            text DEFAULT current_user,
            new_val        json,
            old_val        json
    );
    

    トリガー:

    CREATE FUNCTION change_trigger() RETURNS trigger AS $$
           BEGIN
             IF TG_OP = 'INSERT'
             THEN INSERT INTO logging.t_history (
                    tabname, schemaname, operation, new_val
                  ) VALUES (
                    TG_RELNAME, TG_TABLE_SCHEMA, TG_OP, row_to_json(NEW)
                  );
               RETURN NEW;
             ELSIF  TG_OP = 'UPDATE'
             THEN
               INSERT INTO logging.t_history (
                 tabname, schemaname, operation, new_val, old_val
               )
               VALUES (TG_RELNAME, TG_TABLE_SCHEMA, TG_OP, row_to_json(NEW), row_to_json(OLD));
               RETURN NEW;
             ELSIF TG_OP = 'DELETE'
             THEN
               INSERT INTO logging.t_history
                 (tabname, schemaname, operation, old_val)
                 VALUES (
                   TG_RELNAME, TG_TABLE_SCHEMA, TG_OP, row_to_json(OLD)
                 );
                 RETURN OLD;
             END IF;
           END;
    $$ LANGUAGE 'plpgsql' SECURITY DEFINER;
    

    トリガーを適用します:

    CREATE TRIGGER t BEFORE INSERT OR UPDATE OR DELETE ON your_table
            FOR EACH ROW EXECUTE PROCEDURE change_trigger();
    


    1. php mysqlを使用してテーブルからデータにアクセスする方法は?

    2. 入力値がnullでない場合は列を更新し、そうでない場合は列の既存の値を無視してデータベースに保持します

    3. Oracleユーザーのパスワードの有効期限/猶予期間を設定する

    4. Jqueryのタイムスタンプとphpのタイムスタンプの違いは?