我正在使用postgreSQL并且我有表格,我使用触发器来获得有关表格更改的通知。
现在,我有一个用例,当表上的更新完成时,我只想通知我表的更新列。因此,如果我的表有10列,只有5个更新,我只需要通知5个更新的列。
一种方法是在每列上使用OLD和NEW并进行比较。这将导致每个表的单独功能。
postgreSQL中是否有任何与这种情况相关的功能?
答案 0 :(得分:0)
两者都生成有关在一堆变量中触发函数的表的上下文的所有信息,而OLD和NEW是关联数组,因此您可以自由地做任何您喜欢的事情。例如:
CREATE OR REPLACE FUNCTION valid_id() RETURNS trigger AS $$
my ($new, $old) = ($_TD->{new}, $_TD->{old});
my (@allflds) = keys %$new;
my (@changed) = grep { $new->{$_} ne %$old->{$_} } @allflds;
my (%difold, %difnew);
%difold = map { _$ => $old->{_$} } @changed;
%difnew = map { _$ => $new->{_$} } @changed;
... notify the values in %difold and %difnew as you need ...
$$ LANGUAGE plperl;