PostgreSQL触发“WHEN”不起作用

时间:2014-11-24 13:44:01

标签: postgresql triggers plpgsql

我有一个带有时间戳字段的表,必须在行更改后更新。 函数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

1 个答案:

答案 0 :(得分:0)

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

您的条件没有捕获从/到NULL的任何更改。 column1column2定义为NOT NULL,或者您需要进行调整:

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

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