2016-10-05 36 views
0

我试图创建触发器,该更新会在插入/更新时更新我的​​lastmodified字段。这里是我的触发器:更新时间戳字段的触发器

CREATE OR REPLACE TRIGGER timestamp_trigger BEFORE INSERT OR UPDATE ON orders 
FOR EACH ROW EXECUTE PROCEDURE timestamp_update; 

,我的方法:

CREATE OR REPLACE FUNCTION timestamp_update() 
RETURNS TRIGGER 
AS 
$$ 
BEGIN 
    UPDATE orders 
    SET lastmodified = getdate() 
    WHERE orderid = new.orderid 
    RETURN new; 
END; 
$$ language plpgsql; 

不幸的是,当我尝试更新一些场,场未更新。另外当我创建行时,最后修改的字段不会更新。

回答

1

不要在这样的触发器中使用update,因为它可能会导致无限的递归循环。 如果要修改插入/更新的行,只是改变了new记录:

CREATE OR REPLACE FUNCTION timestamp_update() 
RETURNS TRIGGER 
AS 
$$ 
BEGIN 
    NEW.lastmodified = now(); 
    RETURN new; 
END; 
$$ language plpgsql; 

语法create or replace trigger不正确。

CREATE TRIGGER timestamp_trigger 
BEFORE INSERT OR UPDATE ON orders 
FOR EACH ROW EXECUTE PROCEDURE timestamp_update();