Tant que vous n'apportez des modifications qu'à la ligne qui a déclenché le déclencheur, il est beaucoup plus simple (et moins cher) d'utiliser un BEFORE UPDATE
déclencheur, qui peut apporter des modifications à new.complete_flag
avant qu'il ne soit enregistré dans la table, plutôt que d'avoir à exécuter une UPDATE
déclaration après qu'il est déjà là.
Vous pouvez également limiter le déclencheur aux mises à jour d'un champ particulier avec le UPDATE OF <column>
clause du CREATE TRIGGER
déclaration.
Le résultat final ressemblerait à ceci :
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();