Postgresql触发器列出所有列时更新

时间:2015-03-09 17:27:43

标签: postgresql triggers

来自postgresql docs

  

对于UPDATE触发器,可以使用指定列的列表   这句语法:

     

更新了column_name1 [,column_name2 ...]

     

只有在列出至少一个列出的列作为更新目标时,触发器才会触发。

是否有办法只在所有列出的列都在更新中定位时才触发触发器?

1 个答案:

答案 0 :(得分:0)

  

是否有办法只在所有列出的列都在更新中定位时才触发触发器?

没有。如果更新列出的列的任何,则会触发该触发器。

但是,原则上,您可以比较OLD.column_name和NEW.column_name的值,并仅在所有列都已更改时执行代码。

但是,您应该知道,使用已有的值更新列是完全合法的。例如,从此表开始。

foo_id  foo_desc
1       First
2       Second
update foo
set foo_id = 1, foo_desc = 'First'
where foo_id = 1;

所有列都是目标;他们都没有变成不同的价值观。 (他们做了更改,但他们从1改为1,从'First'改为'First'。)