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

Postgresの挿入または更新トリガーWHEN条件(旧)

    オプションA:

    条件がトリガー自体ではなくトリガー関数に含まれるようにコードを変更できます。このアプローチでは、OLD UPDATEでのみ使用されます 。

    トリガー:

    CREATE TRIGGER mytrigger
        BEFORE INSERT OR UPDATE ON "mytable"
        FOR EACH ROW 
        EXECUTE PROCEDURE mytrigger();
    

    トリガー機能:

    CREATE OR REPLACE FUNCTION mytrigger()
      RETURNS trigger AS
    $BODY$
    begin
    if NEW.score > 0 then
         --code for Insert
         if  (TG_OP = 'INSERT') then
               YOUR CODE
         end if;
    
         --code for update
         if  (TG_OP = 'UPDATE') then
               if OLD.score <> NEW.score then  -- (if score can be null see @voytech comment to this post)
                  YOUR CODE
               end if;
         end if;
    end if;
    return new;
    end;
    $BODY$
      LANGUAGE plpgsql VOLATILE
    

    オプションB:

    Thiloが提案したように、同じトリガー機能を共有する2つのトリガーを作成します。

    トリガー:

    CREATE TRIGGER mytrigger1
        BEFORE INSERT ON "mytable"
        FOR EACH ROW 
        WHEN NEW.score > 0
        EXECUTE PROCEDURE mytrigger();
    
    
    CREATE TRIGGER mytrigger2
        BEFORE UPDATE ON "mytable"
        FOR EACH ROW 
        WHEN (NEW.score > 0 AND OLD.score <> NEW.score)
        EXECUTE PROCEDURE mytrigger();
    

    トリガー機能:

    CREATE OR REPLACE FUNCTION mytrigger()
      RETURNS trigger AS
    $BODY$
    begin
          YOUR CODE
    return new;
    end;
    $BODY$
      LANGUAGE plpgsql VOLATILE
    


    1. JavaからOracleDBへの日付の挿入

    2. TRUNCATEとDELETEの違いは?

    3. ProxySQLロードバランサーをクラスター化する方法

    4. SequelizeFindOneによって返されるオブジェクトにプロパティを追加します