use*_*442 2 postgresql triggers rule postgresql-9.3
我有一个名为列的列updated,用于显示列的最后一次更改.
我的第一次尝试是创建一个触发器,将updated列更改为返回的值now().但是因为此触发器发生在更新事件上,所以它会导致无限循环(更新更新的列会导致触发器触发).
我也尝试用类似的效果实现一个规则.
我无法想象,当我调用和更新函数时,这是我在应用程序层上必须做的事情.那么如何更新该行的更新列而不会导致无限循环?
使用这样的触发器:
CREATE OR REPLACE FUNCTION update() RETURNS trigger AS $$
BEGIN
IF NEW.updated = OLD.updated THEN
NEW.updated = NOW()
END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER table_update
BEFORE UPDATE ON table
FOR EACH ROW EXECUTE PROCEDURE update()
Run Code Online (Sandbox Code Playgroud)
这样你就不会循环 - 你只更新一次值(在执行UPDATE之前),并且你也不会破坏这个值,如果由于某种原因你想updated明确设置(如在导入旧时)例如,来自备份的数据).
| 归档时间: |
|
| 查看次数: |
2884 次 |
| 最近记录: |