2016-10-05 47 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();