如何在POSTGRESQL;
中插入或更新后应用更新我有一个包含字段lastupdate;
的表我希望每当更新行或何时设置该字段插入。
我尝试了这个触发器,但它没有用! HELP !!
CREATE OR REPLACE FUNCTION fn_update_profile()
RETURNS TRIGGER AS $update_profile$
BEGIN
IF (TG_OP = 'INSERT' OR TG_OP = 'UPDATE' ) THEN
UPDATE profile SET lastupdate=now() where oid=OLD.oid;
RETURN NULL;
ELSEIF (TG_OP = 'DELETE') THEN
RETURN NULL;
END IF;
RETURN NULL; -- result is ignored since this is an AFTER trigger
END;
$update_profile$ LANGUAGE plpgsql;
答案 0 :(得分:0)
您的触发功能可以比您更轻松。请记住,PG将在原始表上执行更新或插入,您只需要处理保持profile
表最新:
CREATE OR REPLACE FUNCTION fn_update_profile()
RETURNS TRIGGER AS $update_profile$
BEGIN
UPDATE profile SET lastupdate = now() WHERE oid = NEW.oid;
RETURN NEW;
END;
$update_profile$ LANGUAGE plpgsql;
INSERT
和UPDATE
触发器函数都使用NEW
参数; INSERT
触发器函数没有OLD
参数。如果成功(或NEW
来自OLD
触发器),您应始终从触发器功能返回DELETE
,即使它是AFTER INSERT OR UPDATE
触发器;如果返回NULL
,则将回滚整个操作。如果您在插入或更新后定义要触发的实际触发器,那么您应该是好的:
CREATE TRIGGER tr_update_profile
AFTER INSERT OR UPDATE ON my_table
FOR EACH ROW EXECUTE PROCEDURE fn_update_profile();