我正在尝试创建触发器,在插入/更新时更新我的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;
不幸的是,当我尝试更新某些字段时,字段未更新。此外,当我创建行时,最后修改的字段不会更新。
答案 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();