如何包含我需要监控的列?即而不是一个WHEN
条件我希望有3个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();
答案 0 :(得分:4)
使用OR
或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
,而不适用于INSERT
。插入没有OLD
记录。 The manual on CREATE TRIGGER
:
<强>
condition
强>一个布尔表达式,用于确定触发器函数是否会 实际上是执行。如果指定了
WHEN
,则该函数将仅为 如果condition
返回true
,则会调用此方法。在FOR EACH ROW
触发器中,WHEN
条件可以引用旧行和/或新行值的列 撰写OLD.
column_name
或NEW.
column_name
分别。当然,INSERT
触发器无法引用OLD
,而DELETE
触发器无法引用NEW
。
触发器名称本身不能是模式限定的。再次引用手册:
<强>
name
强>提供新触发器的名称。这必须与同一个表的任何其他触发器的名称不同。该 名称不能是架构限定的
大胆强调我的。
答案 1 :(得分:0)
TG_WHEN
数据类型文字;一串BEFORE,AFTER或INSTEAD OF,取决于触发器的定义。
这里有一个链接可能会使用
http://www.postgresql.org/docs/9.2/static/plpgsql-trigger.html