PostgreSQL 触发器"WHEN"不起作用



>我得到了一个带有时间戳字段的表,该字段必须在行更改后更新。函数change_update_time()更新称为 updated_time 的时间戳字段。我的触发器工作正常,但我无法添加更多WHEN子句(系统只是忽略它们)。

法典:

这是我的触发器:

CREATE TRIGGER update_updated_time_trigger
  BEFORE UPDATE
  ON data_table
  FOR EACH ROW
  WHEN ( 
    (OLD.column1 <> NEW.column1) AND
    (OLD.column2 <> NEW.column2) 
  )
  EXECUTE PROCEDURE change_update_time();

这是我的触发函数:

CREATE OR REPLACE FUNCTION change_update_time()
  RETURNS trigger AS
$BODY$
BEGIN 
  NEW.updated_time = now();
  RETURN NEW;
END;$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 1;

数据库版本:PostgreSQL 9.3.4

一个可能的原因(没有足够的信息来确定):

您的条件不会捕获从/到 NULL 的任何更改。column1column2要么定义NOT NULL要么您需要适应:

WHEN (OLD.column1 IS DISTINCT FROM NEW.column1 AND
      OLD.column2 IS DISTINCT FROM NEW.column2)

另一个典型原因:其他触发因素干预。您必须在问题中列出所有触发器。

最新更新