Докато правите промени само в реда, който е задействал тригера, много по-лесно (и по-евтино) е да използвате BEFORE UPDATE
тригер, който може да прави промени в new.complete_flag
преди да бъде записан в таблицата, вместо да се налага да стартирате UPDATE
изявление, след като вече е там.
Можете също така да ограничите тригера до актуализации на конкретно поле с UPDATE OF <column>
клауза на CREATE TRIGGER
изявление.
Крайният резултат ще изглежда така:
CREATE FUNCTION completed_timestamp() RETURNS trigger AS $$
LANGUAGE plpgsql
BEGIN
IF new.complete_flag = 1 and old.completed_flag = 0 THEN
new.complete_time := current_timestamp;
END IF;
RETURN new;
END;
$$;
CREATE TRIGGER update_timestamp
BEFORE UPDATE OF completed_flag ON tbl_pXXXX
FOR EACH ROW
EXECUTE PROCEDURE completed_timestamp();