Triggers

PostgreSQL 🟡 Mid

Définition

Fonctions exécutées automatiquement en réponse a un evenement (INSERT, UPDATE, DELETE) sur une table. Peuvent être BEFORE ou AFTER et opèrent par ligne (FOR EACH ROW) ou par instruction.

Analogie

Un détecteur de mouvement qui déclenche automatiquement une alarme quand quelqu'un entre.

Exemple de code

CREATE FUNCTION update_timestamp()
RETURNS trigger AS $$
BEGIN
  NEW.updated_at = NOW();
  RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER set_timestamp
  BEFORE UPDATE ON users
  FOR EACH ROW EXECUTE FUNCTION update_timestamp();

Cas d'usage

Mettre a jour automatiquement un timestamp, maintenir un audit log ou propager des modifications.

Anti-pattern

Créer des cascades de triggers qui se déclenchent mutuellement, rendant le flux imprévisible.
#sgbd#interview#database#postgresql

En entretien

  1. Explique-moi ce qu'est un trigger et donne un exemple d'usage.

    Un trigger est une fonction exécutée automatiquement en réponse à un événement comme INSERT, UPDATE ou DELETE, comme un détecteur de mouvement qui déclenche une alarme. On l'utilise par exemple pour mettre à jour automatiquement un timestamp ou maintenir un audit log.

  2. Quel piège faut-il éviter avec les triggers ?

    Il faut éviter de créer des cascades de triggers qui se déclenchent mutuellement, ce qui rend le flux imprévisible. Ça complique fortement le débogage quand plusieurs triggers s'enchaînent sans qu'on le voie dans le code applicatif.

  3. Quelle différence entre BEFORE/AFTER et FOR EACH ROW dans la définition d'un trigger ?

    BEFORE ou AFTER définissent quand le trigger se déclenche par rapport à l'événement, tandis que FOR EACH ROW précise qu'il s'exécute pour chaque ligne modifiée plutôt qu'une seule fois par instruction. L'exemple de mise à jour du timestamp utilise justement BEFORE UPDATE ... FOR EACH ROW.

Fiche mise à jour le 2026-09-27

← → au clavier pour passer d'une fiche à l'autre