我有一个带有时间戳字段的表,必须在行更改后更新。
函数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
答案 0 :(得分:0)
可能的原因(没有足够的信息确定):
您的条件没有捕获从/到NULL的任何更改。 column1
和column2
定义为NOT NULL
,或者您需要进行调整:
WHEN (OLD.column1 IS DISTINCT FROM NEW.column1 AND
OLD.column2 IS DISTINCT FROM NEW.column2)
另一个典型原因:其他触发干预。您必须在问题中列出所有触发器。