Solange Sie nur Änderungen an der Zeile vornehmen, die den Trigger ausgelöst hat, ist es viel einfacher (und billiger), ein BEFORE UPDATE
zu verwenden Trigger, der Änderungen an new.complete_flag
vornehmen kann bevor es in der Tabelle gespeichert wird, anstatt ein UPDATE
ausführen zu müssen Anweisung, nachdem es bereits drin ist.
Sie können den Trigger auch mit UPDATE OF <column>
auf Aktualisierungen eines bestimmten Felds beschränken -Klausel des CREATE TRIGGER
Aussage.
Das Endergebnis würde in etwa so aussehen:
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();