在进行数据库设计的时候,我们通常都会设计这两个字段:ts_created和ts_changed,ts_created默认为now(),在业务中不用考虑,而ts_changed需要业务层中进行实现,但有的时候在代码中会将这个字段遗忘,因此可以考虑使用数据库的触发器来自动完成这个功能。
1、 先建立触发器函数
create function update_timestamp() RETURNS trigger AS $$
BEGIN
NEW.ts_changed := now();
RETURN NEW;
END;
$$ language plpgsql;
2、在需要进行的触发的地方建立触发器
比如,在archive表中就可以考虑这个触发:
CREATE OR REPLACE FUNCTION update_timestamp()
RETURNS trigger AS
$BODY$
BEGIN
NEW.ts_changed := now();
RETURN NEW;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
这样设计以后,业务中仅考虑展示即可,不用关心写入问题。
发表回复