Dokud provádíte změny pouze v řádku, který spustil spouštěč, je mnohem jednodušší (a levnější) použít BEFORE UPDATE
spouštěč, který může provádět změny new.complete_flag
před uložením do tabulky, místo abyste museli spouštět UPDATE
prohlášení poté, co tam již je.
Spouštěč můžete také omezit na aktualizace konkrétního pole pomocí UPDATE OF <column>
klauzule CREATE TRIGGER
prohlášení.
Konečný výsledek by vypadal asi takto:
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();