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

PostgreSQLトリガーを使用して変更(SQLステートメントと行の変更)を保存するにはどうすればよいですか?

    https://www.postgresql.org/docs/current/static/plpgsql-trigger.html

    からの監査トリガーの例
    CREATE TABLE emp (
        empname           text NOT NULL,
        salary            integer
    );
    
    CREATE TABLE emp_audit(
        operation         char(1)   NOT NULL,
        stamp             timestamp NOT NULL,
        userid            text      NOT NULL,
        empname           text      NOT NULL,
        salary integer
    );
    
    CREATE OR REPLACE FUNCTION process_emp_audit() RETURNS TRIGGER AS $emp_audit$
        BEGIN
            --
            -- Create a row in emp_audit to reflect the operation performed on emp,
            -- make use of the special variable TG_OP to work out the operation.
            --
            IF (TG_OP = 'DELETE') THEN
                INSERT INTO emp_audit SELECT 'D', now(), user, OLD.*;
                RETURN OLD;
            ELSIF (TG_OP = 'UPDATE') THEN
                INSERT INTO emp_audit SELECT 'U', now(), user, NEW.*;
                RETURN NEW;
            ELSIF (TG_OP = 'INSERT') THEN
                INSERT INTO emp_audit SELECT 'I', now(), user, NEW.*;
                RETURN NEW;
            END IF;
            RETURN NULL; -- result is ignored since this is an AFTER trigger
        END;
    $emp_audit$ LANGUAGE plpgsql;
    
    CREATE TRIGGER emp_audit
    AFTER INSERT OR UPDATE OR DELETE ON emp
        FOR EACH ROW EXECUTE PROCEDURE process_emp_audit();
    


    1. alembicutilコマンドエラーで識別子が見つかりません

    2. Sqliteが2番目のテーブルにデータを挿入していません

    3. 各GROUPBYグループの最初の行を選択する方法

    4. SQLパラメータの文字列配列をSQLのIN句に渡す方法