如何在插入或更新POSTGRESQL触发器后应用更新

时间:2014-06-08 03:14:50

标签: postgresql triggers sql-update

如何在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;

1 个答案:

答案 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;

INSERTUPDATE触发器函数都使用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();