3

監視する必要がある列を含めるにはどうすればよいですか? つまり、1 つの条件ではなく、WHEN3 つの条件が必要ですWHEN

CREATE  TRIGGER freeradius.insert_into_day_summations 
     BEFORE INSERT ON freeradius.day_guiding_usage
     FOR EACH ROW 
     WHEN (OLD.col1 IS DISTINCT FROM NEW.col1)
     WHEN (OLD.col2 IS DISTINCT FROM NEW.col2)
     WHEN (OLD.col3 IS DISTINCT FROM NEW.col3)
EXECUTE procedure update_sessioninfo();
4

2 に答える 2

6

すべての条件が満たされたとき、またはいずれか条件が満たされたときにトリガーするかどうかに応じて、 ORor - を使用して単一の式を形成します。AND

CREATE TRIGGER update_day_summations  -- see below
BEFORE UPDATE ON freeradius.day_guiding_usage
FOR EACH ROW 
WHEN (OLD.col1 IS DISTINCT FROM NEW.col1
   OR OLD.col2 IS DISTINCT FROM NEW.col2
   OR OLD.col3 IS DISTINCT FROM NEW.col3)
EXECUTE procedure update_sessioninfo();

これは単なるブール式であり、行のすべての列を含めることができます。
ただし、あなたの表現は に対してのみ意味を持ち、 に対しては意味がUPDATEありませんINSERTOLD挿入の記録はありません。のマニュアルCREATE TRIGGER:

condition

トリガー関数が実際に実行されるかどうかを決定するブール式。が指定されている場合、 が を返すWHEN場合にのみ関数が呼び出されます。トリガーでは、 条件は、またはをそれぞれ記述して、古い行値および/または新しい行値の列を参照できます。もちろん、 トリガーは を参照できず、トリガーは を参照できません。conditiontrueFOR EACH ROWWHENOLD.column_nameNEW.column_nameINSERTOLDDELETENEW

また、トリガー名自体をスキーマ修飾することはできません。マニュアルをもう一度引用します。

name

新しいトリガーに付ける名前。これは、同じテーブルの他のトリガーの名前とは異なる必要があります。名前 をスキーマ修飾することはできません

大胆強調鉱山。

于 2013-08-21T14:41:09.647 に答える
-1

TG_WHEN

データ型テキスト。トリガーの定義に応じて、BEFORE、AFTER、または INSTEAD OF の文字列。

ここに使用できるリンクがあります

http://www.postgresql.org/docs/9.2/static/plpgsql-trigger.html

于 2013-08-22T07:16:32.757 に答える