2016-10-05 3 views
0

Я пытаюсь создать триггер, который обновляет мое поле lastmodified на вставке/обновлении. Вот мой триггер:Trigger for update timestamp field

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();