如何包含我需要监控的列? IE。我想要 3 个
WHEN
条件,而不是一个 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();
使用
OR
或 AND
形成单个表达式 - 取决于您是否要在满足 all 条件或满足 one: 时触发
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 FUNCTION update_sessioninfo();
参见:
它只是一个布尔表达式,可以涉及该行的所有列。
但是,你的表达只对
UPDATE
有意义,对INSERT
没有意义。没有用于插入的 OLD
记录。 手册CREATE TRIGGER
:
condition
布尔表达式,决定触发函数是否会 实际被执行。如果指定了
,则该函数将仅是 如果WHEN
返回condition
,则调用。在true
触发器中,FOR EACH ROW
条件可以引用旧的和/或新的行值的列 分别写WHEN
OLD.
或column_name
NEW.
。当然,column_name
触发器不能引用INSERT
并且OLD
触发器不能引用DELETE
。NEW
并且触发器名称本身不能是模式限定的。再次引用手册:
name
新触发器的名称。这必须与同一表的任何其他触发器的名称不同。这 名称不能是模式限定的
粗体强调我的。
TG_WHEN
数据类型文本; BEFORE、AFTER 或 INSTEAD OF 的字符串,具体取决于触发器的定义。
这是一个可以使用的链接
http://www.postgresql.org/docs/9.2/static/plpgsql-trigger.html