触发更新时间戳字段

时间:2016-10-05 02:26:53

标签: sql postgresql

我正在尝试创建触发器,在插入/更新时更新我的​​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 个答案:

答案 0 :(得分: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();