CREATE TRIGGER

Nom

CREATE TRIGGER -- définit un nouveau déclencheur

Synopsis

CREATE TRIGGER nom { BEFORE | AFTER } { evenement [ OR ... ] }
    ON table [ FOR [ EACH ] { ROW | STATEMENT } ]
    EXECUTE PROCEDURE nomfonc ( arguments )

Description

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.

Paramètres

nom

Le nom à donner au nouveau déclencheur. Il doit être distinct du nom de tout autre déclencheur pour la même table.

BEFORE
AFTER

Détermine si la fonction est appelée avant ou après l'événement.

é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.

table

Le nom (pouvant être qualifié du nom du schéma) de la table à laquelle est rattaché le déclencheur.

FOR EACH ROW
FOR EACH STATEMENT

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.

nomfonc

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é.

arguments

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.

Notes

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.

Exemples

Section 35.4 contient un exemple complet.

Compatibilité

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 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.

Voir aussi

CREATE FUNCTION, ALTER TRIGGER, DROP TRIGGER