背景:我们有一个completed_flag即默认为0,并更新1,当一个人完成了问卷调查。 我想记录此更新发生的时间戳
写这个触发器/功能,当标记被从0触发1更新时间戳记后,我质疑我是否这样做的最佳方式。 我怀疑它是不是要做到这一点的最好办法,但我有点新的Postgres的。 触发器可以调用的函数,只有当该值发生变化? 这将消除检查该值每行更新,这似乎过度需求
-- add new column to store time the respondent completed
ALTER TABLE tbl_pXXXX ADD COLUMN complete_time timestamp without time zone;
-- function to insert timestamp
CREATE FUNCTION completed_timestamp() RETURNS trigger AS $$
LANGUAGE plpgsql
BEGIN
IF new.complete_flag = 1 and old.completed_flag = 0
THEN UPDATE tbl_pXXXX
SET complete_time = current_timestamp
END;
$$;
-- trigger to call the function
CREATE TRIGGER update_timestamp
AFTER UPDATE ON tbl_pXXXX
FOR EACH ROW
EXECUTE PROCEDURE completed_timestamp();