PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

postgresql - déclencheur, mise à jour de l'horodatage lors de la mise à jour du champ

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();