>我得到了一个带有时间戳字段的表,该字段必须在行更改后更新。函数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 的任何更改。column1
和column2
要么定义NOT NULL
要么您需要适应:
WHEN (OLD.column1 IS DISTINCT FROM NEW.column1 AND
OLD.column2 IS DISTINCT FROM NEW.column2)
另一个典型原因:其他触发因素干预。您必须在问题中列出所有触发器。