Zolang u alleen wijzigingen aanbrengt in de rij die de trigger heeft geactiveerd, is het veel eenvoudiger (en goedkoper) om een BEFORE UPDATE
te gebruiken trigger, die wijzigingen kan aanbrengen in new.complete_flag
voordat het in de tabel wordt opgeslagen, in plaats van een UPDATE
. uit te voeren statement nadat het er al in staat.
U kunt de trigger ook beperken tot updates van een bepaald veld met de UPDATE OF <column>
clausule van de CREATE TRIGGER
verklaring.
Het eindresultaat ziet er ongeveer zo uit:
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();