CREATE EVENT TRIGGER — définir un nouveau trigger sur événement
CREATE EVENT TRIGGERnom
ONevenement
[ WHENvariable_filtre
IN (valeur_filtre
[, ... ]) [ AND ... ] ] EXECUTE { FUNCTION | PROCEDURE }nom_fonction
()
CREATE EVENT TRIGGER
crée un nouveau trigger sur
événement. À chaque fois que l'événement désigné intervient et que la
condition WHEN
associée au trigger est satisfaite,
la fonction du trigger est exécutée. Pour une introduction générale aux
triggers sur événement, voir Chapitre 39. L'utilisateur
qui crée un trigger sur événement devient son propriétaire.
nom
Le nom à donner au nouveau trigger. Ce nom doit être unique sur la base de données.
evenement
Le nom de l'événement qui déclenche un appel à la fonction donnée. Voir Section 39.1 pour plus d'informations sur les noms d'événements.
variable_filtre
Le nom d'une variable utilisée pour filtrer les événements. Ceci rend
possible de restreindre l'exécution du trigger sur un sous-ensemble des
cas dans lesquels ceci est supporté. Actuellement la seule valeur
autorisée pour variable_filtre
est TAG
.
valeur_filtre
Une liste de valeurs pour la variable_filtre
associée, pour laquelle le
trigger sera déclenché. Pour TAG
, cela signifie une
liste de balises de commande (par exemple 'DROP
FUNCTION'
).
nom_fonction
Une fonction fournie par un utilisateur, déclarée ne prendre aucun
argument et renvoyant le type de données event_trigger
.
Dans la syntaxe de CREATE EVENT TRIGGER
, les mots
clés FUNCTION
et PROCEDURE
sont
équivalents mais la fonction référencée doit dans tous les cas être une
fonction, et non pas une procédure. L'utilisation du mot-clé
PROCEDURE
est ici historique et dépréciée.
Seuls les superutilisateurs peuvent créer des triggers sur événement.
Les triggers sur événement sont désactivées en mode simple utilisateur (voir postgres). Si un trigger sur événement erroné désactive la base de données à tel point que vous ne pouvez même pas supprimer le trigger, redémarrez le serveur en mode simple utilisateur et vous pourrez enfin le faire.
Empêche l'exécution de toute commande DDL :
CREATE OR REPLACE FUNCTION annule_toute_commande() RETURNS event_trigger LANGUAGE plpgsql AS $$ BEGIN RAISE EXCEPTION 'la commande % est désactivée', tg_tag; END; $$; CREATE EVENT TRIGGER annule_ddl ON ddl_command_start EXECUTE FUNCTION annule_toute_commande();
Il n'existe pas d'instruction CREATE EVENT TRIGGER
dans le
standard SQL.