在触发器NEW.field
值内始终具有<some value>
,尽管该列是否出现在UPDATE语句的SET
列表上或没有:
UPDATE test SET name = 'abc', field = <some value>;
UPDATE test SET name = 'abc';
对于触发器中的两个查询,我将获得field
和<some value>
。
有没有办法从触发器内部区分这两个查询?
答案 0 :(得分:0)
我认为您可以将新值与旧值进行比较。如果不同,则您知道该字段已设置。
除非您想在字段更新时捕获,即使字段值没有变化,我也认为这可以捕获。
CREATE OR REPLACE FUNCTION test_update_trigger()
RETURNS trigger AS
$BODY$
BEGIN
if (OLD.field is null and NEW.field is not null or
OLD.field is not null and NEW.field is null or
OLD.field != NEW.field) then
-- do something
end if;
return NEW;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;