跟踪更新列postgresql触发器?

时间:2016-05-04 11:13:35

标签: postgresql stored-procedures triggers postgresql-9.3

我正在使用postgreSQL并且我有表格,我使用触发器来获得有关表格更改的通知。

现在,我有一个用例,当表上的更新完成时,我只想通知我表的更新列。因此,如果我的表有10列,只有5个更新,我只需要通知5个更新的列。

一种方法是在每列上使用OLD和NEW并进行比较。这将导致每个表的单独功能。

postgreSQL中是否有任何与这种情况相关的功能?

1 个答案:

答案 0 :(得分:0)

您可以在pl/tclpl/perl中创建触发器。

两者都生成有关在一堆变量中触发函数的表的上下文的所有信息,而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;