Résumé : dans ce tutoriel, vous apprendrez à utiliser la déclaration PostgreSQL CREATE TRIGGER
pour créer un trigger.
Pour créer un nouveau trigger dans PostgreSQL, vous suivez les étapes suivantes :
- Premièrement, créez une fonction trigger en utilisant la déclaration
CREATE FUNCTION
. - Deuxièmement, liez la fonction de déclenchement à une table en utilisant l’instruction
CREATE TRIGGER
.
Si vous n’êtes pas familier avec la création d’une fonction définie par l’utilisateur, vous pouvez consulter la section PL/pgSQL.
Syntaxe de la fonction de déclenchement
Une fonction de déclenchement est similaire à une fonction régulière définie par l’utilisateur. Cependant, une fonction de déclenchement ne prend pas d’arguments et a une valeur de retour avec le type trigger
.
Ce qui suit illustre la syntaxe de la création d’une fonction de déclenchement :
Code language: SQL (Structured Query Language) (sql)
Notez que vous pouvez créer une fonction de déclenchement en utilisant tous les langages supportés par PostgreSQL. Dans ce tutoriel, nous utiliserons PL/pgSQL.
Une fonction de déclenchement reçoit des données sur son environnement d’appel à travers une structure spéciale appelée TriggerData qui contient un ensemble de variables locales.
Par exemple, OLD
et NEW
représentent les états de la ligne dans la table avant ou après l’événement déclencheur.
PostgreSQL fournit également d’autres variables locales précédées de TG_
telles que TG_WHEN
, et TG_TABLE_NAME
.
Une fois que vous avez défini une fonction de déclenchement, vous pouvez la lier à un ou plusieurs événements de déclenchement tels que INSERT
, UPDATE
, et DELETE
.
Introduction à l’instruction CREATE TRIGGER de PostgreSQL
L’instruction CREATE TRIGGER
crée un nouveau déclencheur. Ce qui suit illustre la syntaxe de base de l’instruction CREATE TRIGGER
:
Code language: SQL (Structured Query Language) (sql)
Dans cette syntaxe:
Premièrement, spécifiez le nom du déclencheur après les mots-clés TRIGGER
.
Deuxièmement, spécifiez le timing qui provoque le déclenchement du déclencheur. Il peut être BEFORE
ou AFTER
un événement se produit.
Troisièmement, spécifiez l’événement qui invoque le déclencheur. L’événement peut être INSERT
, DELETE
, UPDATE
ou TRUNCATE
.
Quatrièmement, spécifiez le nom de la table associée au déclencheur après le mot-clé ON
.
Cinquièmement, spécifiez le type de déclencheurs qui peut être :
- Déclencheur de niveau ligne qui est spécifié par la clause
FOR EACH ROW
. - Déclencheur de niveau état qui est spécifié par la clause
FOR EACH STATEMENT
.
Un déclencheur de niveau ligne est déclenché pour chaque ligne tandis qu’un déclencheur de niveau déclaration est déclenché pour chaque transaction.
Supposons qu’une table a 100 lignes et deux déclencheurs qui seront déclenchés lorsqu’un événement DELETE
se produit.
Si la déclaration DELETE
supprime 100 lignes, le déclencheur de niveau ligne se déclenchera 100 fois, une fois pour chaque ligne supprimée. D’autre part, un déclencheur de niveau déclaration sera déclenché une fois, quel que soit le nombre de lignes supprimées.
Enfin, spécifiez le nom de la fonction de déclenchement après les mots-clés EXECUTE PROCEDURE
.
Exemple de création de déclencheur PostgreSQL
L’instruction suivante crée une nouvelle table appelée employees
:
Code language: SQL (Structured Query Language) (sql)
Supposons que lorsque le nom d’un employé change, vous voulez enregistrer les changements dans une table séparée appelée employee_audits
:
Code language: SQL (Structured Query Language) (sql)
D’abord, créez une nouvelle fonction appelée log_last_name_changes
:
Code language: SQL (Structured Query Language) (sql)
La fonction insère l’ancien nom de famille dans la table employee_audits
incluant l’id de l’employé, le nom de famille et l’heure du changement si le nom de famille d’un employé change.
Le OLD
représente la ligne avant mise à jour tandis que le NEW
représente la nouvelle ligne qui sera mise à jour. Le OLD.last_name
renvoie le nom de famille avant la mise à jour et le NEW.last_name
renvoie le nouveau nom de famille.
Deuxièmement, liez la fonction de déclenchement à la table employees
. Le nom du déclencheur est last_name_changes
. Avant que la valeur de la colonne last_name
ne soit mise à jour, la fonction déclencheur est automatiquement invoquée pour enregistrer les changements.
Code language: SQL (Structured Query Language) (sql)
Troisièmement, insérez quelques lignes dans la table employees
:
Code language: SQL (Structured Query Language) (sql)
Quatrièmement, examinez le contenu de la table employees
:
Code language: SQL (Structured Query Language) (sql)
Supposons que Lily Bush
change son nom de famille en Lily Brown
.
Cinquièmement, mettez à jour le nom de famille de Lily avec le nouveau:
Code language: SQL (Structured Query Language) (sql)
Septièmement, vérifiez si le nom de famille de Lily
a été mis à jour:
Code language: SQL (Structured Query Language) (sql)
Comme vous pouvez le voir sur la sortie, le nom de famille de Lily a été mis à jour.
Huitièmement, vérifiez le contenu de la table employee_audits
:
Code language: SQL (Structured Query Language) (sql)
Le changement a été enregistré dans la table employee_audits
par le déclencheur.
Dans ce tutoriel, vous avez appris à utiliser le CREATE TRIGGER
de PostgreSQL pour créer un nouveau déclencheur.
- Ce tutoriel vous a-t-il été utile ?
- OuiNon
.