Documentation PostgreSQL 9.4.26 > Programmation serveur > Déclencheurs (triggers) sur évènement > Écrire des fonctions trigger sur événement en C | |
Matrice de déclenchement des triggers sur évènement | Un exemple complet de trigger sur événement |
Cette section décrit les détails bas niveau de l'interface pour une fonction trigger sur événement bas niveau. Ces informations sont seulement nécessaires si vous écrivez des fonctions triggers sur événement en C. Si vous utilisez un langage de plus haut niveau, ces détails sont gérés pour vous. Dans la plupart des cas, vous devriez songer sérieusement à utiliser un langage procédural avant d'écrire vos triggers sur événement en C. La documentation de chaque langage procédurale explique comment écrire un trigger sur événement dans ce langage.
Les fonctions de trigger sur événement doivent utiliser l'interface du gestionnaire de fonctions « version 1 ».
Quand une fonction est appelée par le gestionnaire de triggers sur événement, elle ne reçoit aucun argument normal mais un pointeur « context » lui est fourni. Il pointe vers une structure de type EventTriggerData. Les fonctions C peuvent vérifier si elles ont été appelées par le gestionnaire de triggers sur événement en exécutant la macro :
CALLED_AS_EVENT_TRIGGER(fcinfo)
qui vaut en fait :
((fcinfo)->context != NULL && IsA((fcinfo)->context, EventTriggerData))
Si cela renvoie la valeur true, alors il est possible de convertir fcinfo->context vers le type EventTriggerData * et d'utiliser la structure pointée EventTriggerData. La fonction ne doit pas modifier la structure EventTriggerData ou toute donnée qu'elle fournit.
struct EventTriggerData est défini dans commands/event_trigger.h :
typedef struct EventTriggerData { NodeTag type; const char *event; /* event name */ Node *parsetree; /* parse tree */ const char *tag; /* command tag */ } EventTriggerData;
dont les membres sont définis ainsi :
Always T_EventTriggerData.
Décrit l'événement pour lequel la fonction a été appelée. Ce sera soit "ddl_command_start", soit "ddl_command_end", soit "sql_drop". Voir Section 37.1, « Aperçu du fonctionnement des triggers sur évènement » pour la signification de ces événements.
Un pointeur vers l'arbre d'analyse de la commande. Vérifiez le code source de PostgreSQL pour les détails. La structure de l'arbre d'analyse est sujet à modification sans notification.
La balise de la commande associée avec l'événement pour lequel le trigger sur événement est exécuté, par exemple "CREATE FUNCTION".
Une fonction trigger sur événement doit renvoyer un pointeur NULL (et pas une valeur SQL NULL, autrement dit ne pas configurer isNull à true).