Les triggers PostgreSQL sont des fonctions de rappel de base de données qui s'exécutent automatiquement ou se "déclenchent" lorsqu'un événement de base de données spécifié se produit, comme un `INSERT`, `UPDATE`, `DELETE`, ou `TRUNCATE`. Ils sont utilisés pour maintenir l'intégrité des données, appliquer des règles commerciales ou effectuer des opérations de journalisation et d'audit.
Utilisation
Les déclencheurs sont utilisés lorsque vous devez automatiser des tâches en réponse à des modifications des données d'un tableau. Ils sont particulièrement utiles pour maintenir la cohérence et mettre en œuvre une logique commerciale complexe au niveau de la base de données.
sql
CREATETRIGGER trigger_name
{BEFORE|AFTER|INSTEADOF}{INSERT|UPDATE|DELETE|TRUNCATE}ON table_name
[FOREACHROW|FOREACHSTATEMENT]EXECUTEPROCEDUREfunction_name();Propulsé par
Dans cette syntaxe, `CREATE TRIGGER` définit un nouveau trigger nommé `trigger_name`, en spécifiant quand il doit se déclencher (`BEFORE`, `AFTER`, ou `INSTEAD OF`), quel événement doit le déclencher (`INSERT`, `UPDATE`, `DELETE`, ou `TRUNCATE`), et la table à laquelle il s'applique (`ON table_name`). `EXECUTE PROCEDURE` appelle la fonction qui contient la logique de déclenchement.
Exemples
1. Déclencheur de base sur l'insert
sql
CREATEORREPLACEFUNCTIONlog_insert()RETURNSTRIGGERAS $$
BEGININSERTINTOlog_table(action, timestamp)VALUES('INSERT',NOW());RETURNNEW;END;
$$ LANGUAGE plpgsql;CREATETRIGGER insert_trigger
AFTERINSERTON main_table
FOREACHROWEXECUTEPROCEDURElog_insert();Propulsé par
Cet exemple crée un trigger qui enregistre une entrée dans `log_table` à chaque fois qu'une nouvelle ligne est insérée dans `main_table`.
2. Déclenchement de l'application d'une règle de gestion
sql
CREATEORREPLACEFUNCTIONcheck_salary()RETURNSTRIGGERAS $$
BEGINIFNEW.salary <1000THENRAISEEXCEPTION'Salary cannot be less than 1000';ENDIF;RETURNNEW;END;
$$ LANGUAGE plpgsql;CREATETRIGGER salary_check
BEFOREINSERTORUPDATEON employees
FOREACHROWEXECUTEPROCEDUREcheck_salary();Propulsé par
Ici, un déclencheur permet de s'assurer que le salaire d'un employé n'est pas inférieur à 1000, que ce soit lors d'une insertion ou d'une mise à jour.
3. Déclenchement de l'enregistrement des audits
sql
CREATEORREPLACEFUNCTIONaudit_changes()RETURNSTRIGGERAS $$
BEGINIFTG_OP='UPDATE'THENINSERTINTOaudit_log(table_name, operation, old_data, new_data, changed_at)VALUES(TG_TABLE_NAME,TG_OP,ROW(OLD.*),ROW(NEW.*),NOW());ENDIF;RETURNNEW;END;
$$ LANGUAGE plpgsql;CREATETRIGGER audit_trigger
AFTERUPDATEON any_table
FOREACHROWEXECUTEPROCEDUREaudit_changes();Propulsé par
Cet exemple capture les changements dans `any_table` en enregistrant l'ancienne et la nouvelle ligne dans un tableau `audit_log` après chaque mise à jour.
Gestion des déclencheurs
Pour désactiver un déclencheur :
sql
ALTERTABLE table_name DISABLETRIGGER trigger_name;Propulsé par
Pour activer un déclencheur :
sql
ALTERTABLE table_name ENABLETRIGGER trigger_name;Propulsé par
Pour supprimer un déclencheur :
sql
DROPTRIGGER trigger_name ON table_name;Propulsé par
Conseils et bonnes pratiques
Veillez à ce que les déclencheurs soient simples et efficaces. Une logique complexe peut ralentir les opérations de la base de données. Soyez prudent quant aux conséquences sur les performances, en particulier dans les environnements hautement transactionnels.
Utilisez des déclencheurs pour les contraintes critiques. Veillez à ce que les règles commerciales essentielles soient appliquées au niveau de la base de données.
Limitez les effets secondaires. Les déclencheurs doivent éviter de modifier l'état de la base de données de manière inattendue.
Déclencheurs de documents. Conservez une documentation claire pour chaque déclencheur afin d'aider les futurs développeurs à comprendre son objectif.
Effectuez un test approfondi. Assurez-vous que les déclencheurs fonctionnent comme prévu en testant divers scénarios et cas limites.
Soyez attentif à l'ordre d'exécution. Comprendre l'ordre d'exécution lorsque plusieurs déclencheurs sont définis pour le même événement sur un tableau.
Gérer les appels récursifs. Soyez conscient des appels déclencheurs récursifs potentiels et mettez en œuvre des mesures de protection si nécessaire.
Les triggers PostgreSQL sont des fonctions de rappel de base de données qui s'exécutent automatiquement ou se "déclenchent" lorsqu'un événement de base de données spécifié se produit, comme un `INSERT`, `UPDATE`, `DELETE`, ou `TRUNCATE`. Ils sont utilisés pour maintenir l'intégrité des données, appliquer des règles commerciales ou effectuer des opérations de journalisation et d'audit.
Utilisation
Les déclencheurs sont utilisés lorsque vous devez automatiser des tâches en réponse à des modifications des données d'un tableau. Ils sont particulièrement utiles pour maintenir la cohérence et mettre en œuvre une logique commerciale complexe au niveau de la base de données.
Dans cette syntaxe, `CREATE TRIGGER` définit un nouveau trigger nommé `trigger_name`, en spécifiant quand il doit se déclencher (`BEFORE`, `AFTER`, ou `INSTEAD OF`), quel événement doit le déclencher (`INSERT`, `UPDATE`, `DELETE`, ou `TRUNCATE`), et la table à laquelle il s'applique (`ON table_name`). `EXECUTE PROCEDURE` appelle la fonction qui contient la logique de déclenchement.
Exemples
1. Déclencheur de base sur l'insert
Cet exemple crée un trigger qui enregistre une entrée dans `log_table` à chaque fois qu'une nouvelle ligne est insérée dans `main_table`.
2. Déclenchement de l'application d'une règle de gestion
Ici, un déclencheur permet de s'assurer que le salaire d'un employé n'est pas inférieur à 1000, que ce soit lors d'une insertion ou d'une mise à jour.
3. Déclenchement de l'enregistrement des audits
Cet exemple capture les changements dans `any_table` en enregistrant l'ancienne et la nouvelle ligne dans un tableau `audit_log` après chaque mise à jour.
Gestion des déclencheurs
Pour désactiver un déclencheur :
Pour activer un déclencheur :
Pour supprimer un déclencheur :
Conseils et bonnes pratiques