Finché stai apportando modifiche solo alla riga che ha attivato il trigger, è molto più semplice (ed economico) utilizzare un BEFORE UPDATE
trigger, che può apportare modifiche a new.complete_flag
prima che venga salvato nella tabella, invece di dover eseguire un UPDATE
dichiarazione dopo che è già lì.
Puoi anche limitare il trigger agli aggiornamenti di un campo particolare con il UPDATE OF <column>
clausola del CREATE TRIGGER
dichiarazione.
Il risultato finale sarebbe simile a questo:
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();