【发布时间】:2015-06-30 20:20:54
【问题描述】:
背景:我们有一个 completed_flag,默认为 0,当一个人完成调查时更新为 1。我想记录这次更新发生的时间戳
在编写此触发器/函数以在标志从 0 触发到 1 时更新时间戳之后,我质疑我是否以最好的方式做到了这一点。我怀疑这不是最好的方法,但我对 postgres 有点陌生。触发器只能在该值更改时调用该函数吗?这将消除每次 ROW 更新检查此值的需要,这似乎过多
-- 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();
【问题讨论】:
标签: postgresql function triggers