use*_*853 2 postgresql ddl triggers boolean-expression
如何包含需要监控的列?即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();
Run Code Online (Sandbox Code Playgroud)
使用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();
Run Code Online (Sandbox Code Playgroud)
它只是一个布尔表达式,可以涉及行的所有列。
但是,您的表达式只对 有意义,对UPDATE没有意义INSERT。没有OLD插入记录。手册CREATE TRIGGER:
condition一个布尔表达式,用于确定触发器函数是否将被实际执行。如果
WHEN指定,则只有在condition返回时才会调用该函数true。在FOR EACH ROW触发器中,WHEN条件可以分别通过写入OLD.column_name或来引用旧和/或新行值的列NEW.column_name。当然,INSERT触发器不能引用OLD,DELETE触发器也不能引用NEW。
并且触发器名称本身不能是模式限定的。再次引用手册:
name赋予新触发器的名称。这必须与同一表的任何其他触发器的名称不同。该 名称不能用模式修饰
大胆强调我的。
| 归档时间: |
|
| 查看次数: |
7457 次 |
| 最近记录: |