Documentation PostgreSQL 7.4.29 | ||||
---|---|---|---|---|
Précédent | Arrière rapide | Avance rapide | Suivant |
CREATE TRIGGER nom { BEFORE | AFTER } { evenement [ OR ... ] } ON table [ FOR [ EACH ] { ROW | STATEMENT } ] EXECUTE PROCEDURE nomfonc ( arguments )
CREATE TRIGGER crée un nouveau déclencheur. Le déclencheur sera associé avec la table spécifiée et exécutera la fonction spécifiée nomfonc lorsque certains événements surviennent.
Le déclencheur peut être spécifié pour être lancé soit avant que l'opération ne soit tentée sur une ligne (avant la vérification des contraintes et que l'INSERT, l'UPDATE ou le DELETE ne soit tenté) ou une fois que l'opération s'est terminée (après la vérification des contraintes et que l'INSERT, l'UPDATE ou le DELETE ne soit terminé). Si le déclencheur est lancé avant l'événement, le déclencheur pourrait annuler l'opération pour la ligne courante ou modifier la ligne en cours d'insertion (seulement pour les opérations INSERT et UPDATE). Si le déclencheur se lance après l'événement, toute modification, incluant la dernière insertion, mise à jour ou suppression, sont << visibles >> par le déclencheur.
Un déclencheur qui est marqué FOR EACH ROW est appelé pour chaque ligne que l'opération modifie. Par exemple, un DELETE affectant dix lignes causera le lancement de tout déclencheur ON DELETE sur la relation cible dix fois séparément, une fois pour chaque ligne supprimée. Au contraire, un déclencheur marqué FOR EACH STATEMENT s'exécute seulement une fois pour toute opération donnée, quelque soit le nombre de lignes qu'il modifie (en particulier, une opération qui ne modifie aucune ligne, résultera toujours en l'exécution des déclencheurs FOR EACH STATEMENT applicables).
Si plusieurs déclencheurs du même genre sont définis pour le même événement, ils sont déclenchés suivant l'ordre alphabétique de leur nom.
SELECT ne modifie aucune ligne donc vous ne pouvez pas créer de déclencheurs SELECT. Les règles et vues sont plus appropriées dans de tels cas.
Référez-vous à Chapitre 35 pour plus d'informations sur les déclencheurs.
Le nom à donner au nouveau déclencheur. Il doit être distinct du nom de tout autre déclencheur pour la même table.
Détermine si la fonction est appelée avant ou après l'événement.
Fait partie de INSERT, UPDATE ou DELETE ; ceci spécifie l'événement qui lance le déclencheur. Plusieurs événements peuvent être donnés en utilisant OR.
Le nom (pouvant être qualifié du nom du schéma) de la table à laquelle est rattaché le déclencheur.
Ceci spécifie si la procédure du déclencheur doit être lancée une fois pour chaque ligne affectée par l'événement du déclencheur ou simplement une fois par instruction SQL. Si rien n'est indiqué, FOR EACH STATEMENT est la valeur par défaut.
Une fonction fournie par l'utilisateur, déclarée comme ne prenant aucun argument et renvoyant le type trigger, qui est exécutée lorsque le déclencheur est lancé.
Une liste optionnelle d'arguments séparés par des virgules à fournir à la fonction lors le déclencheur est exécuté. Les arguments sont des constantes littérales de chaînes. Des noms simples et des constantes numériques peuvent être écrits ici aussi mais ils seront tous convertis en chaîne. Merci de vérifier la description du langage d'implémentation de la fonction déclencheur sur la façon dont les arguments du déclencheur sont accessibles à l'intérieur d'une fonction ; cela pourrait être différents des arguments de fonctions standards.
Pour créer un déclencheur sur une table, l'utilisateur doit posséder le droit TRIGGER sur la table.
Dans les versions de PostgreSQL antérieures à la 7.3, il était nécessaire de déclarer que les fonctions déclencheur renvoyaient un type opaque, plutôt que trigger. Pour supporter le chargement des anciens fichiers de sauvegarde, CREATE TRIGGER acceptera qu'une fonction déclare une valeur de retour de type opaque mais il affichera un message d'avertissement et modifiera le type de retour déclaré de la fonction par trigger.
Utilisez DROP TRIGGER pour supprimer un déclencheur.
L'instruction CREATE TRIGGER de PostgreSQL implémente un sous-ensemble du standard SQL99. (Il n'existe rien sur les déclencheurs dans SQL92.) Les fonctionnalités manquantes sont :
SQL99 permet aux déclencheurs de se lancer dans des mises à jour de colonnes spécifiques (c'est-à-dire AFTER UPDATE OF col1, col2).
SQL99 vous permet de définir des alias pour les lignes << old >> et << new >> ou pour les tables à utiliser dans la définition des actions déclenchées (c'est-à-dire CREATE TRIGGER ... ON nomtable REFERENCING OLD ROW AS unnom NEW ROW AS unautrenom ...). Comme PostgreSQL autorise l'écriture de procédures pour déclencheurs dans tout langage défini par l'utilisateur, l'accès aux données est géré d'une façon spécifique à chaque langage.
PostgreSQL permet seulement l'exécution d'une fonction définie par l'utilisateur pour l'action déclenchée. SQL99 permet l'exécution d'un certain nombres d'autres commandes SQL, telles que CREATE TABLE comme action déclenchée. Cette limitation n'est pas difficile à contourner en créant une fonction définie par l'utilisateur et qui exécute les commandes désirées.
SQL99 spécifie que les déclencheurs multiples devraient être lancés dans l'ordre de leur création. PostgreSQL utilise l'ordre alphabétique de leur nom, ce qui a été jugé plus agréable à utiliser.
La capacité à spécifier plusieurs actions pour un simple déclencheur en utilisant OR est une extension PostgreSQL du standard SQL.
Précédent | Sommaire | Suivant |
CREATE TABLE AS | Niveau supérieur | CREATE TYPE |