1
我正在使用postgreSQL,并且我有使用触发器来获取表上更改通知的表。跟踪更新的列postgresql触发器?
现在,我有一个用法,当表上的更新完成后,我只想通知我表中的更新列。所以,如果我的表有10列,只有5个更新,我只需要通知5个更新的列。
一种方法是在每一列上使用OLD和NEW并进行比较。这将导致每个表单独的功能。
在这种情况下postgreSQL有什么功能吗?
我正在使用postgreSQL,并且我有使用触发器来获取表上更改通知的表。跟踪更新的列postgresql触发器?
现在,我有一个用法,当表上的更新完成后,我只想通知我表中的更新列。所以,如果我的表有10列,只有5个更新,我只需要通知5个更新的列。
一种方法是在每一列上使用OLD和NEW并进行比较。这将导致每个表单独的功能。
在这种情况下postgreSQL有什么功能吗?
两者都产生关于在一堆变量中触发函数的表的上下文的所有信息,而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;
您可以使用'hstore'或'json'来检测更改。看到这里http://okbob.blogspot.co.uk/2015/01/most-simply-implementation-of-history.html或这里http://8kb.co.uk/blog/2015/01/19/copying -pavel-stehules-simple-history-table-but-the-the-jsonb-type/ –
@a_horse_with_no_name:第一个链接不起作用。 'jsonb'在PostgreSQL 9.4中,我有9.3。对于用例,9.3有解决方案吗? –
第一个链接对我毫无问题。如果你确实想使用json解决方案,那么为什么不升级到9.5? –