CREATE EVENT TRIGGER — définir un nouveau trigger sur événement
CREATE EVENT TRIGGER nom ON evenement [ WHEN variable_filtre IN (valeur_filtre [, ... ]) [ AND ... ] ] EXECUTE 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, Déclencheurs (triggers) sur évènement. L'utilisateur qui crée un trigger sur événement devient son propriétaire.
Le nom à donner au nouveau trigger. Ce nom doit être unique sur la base de données.
Le nom de l'événement qui déclenche un appel à la fonction donnée. Voir Section 39.1, « Aperçu du fonctionnement des triggers sur évènement » pour plus d'informations sur les noms d'événements.
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.
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').
Une fonction fournie par un utilisateur, déclarée ne prendre aucun argument et renvoyant le type de données event_trigger.
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(1)). 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 PROCEDURE annule_toute_commande();