PostgreSQLLa base de données la plus sophistiquée au monde.
Documentation PostgreSQL 16.6 » Programmation serveur » Triggers sur événement » Écrire des fonctions trigger sur événement en C

40.3. Écrire des fonctions trigger sur événement en C #

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 */
    CommandTag  tag;        /* command tag */
} EventTriggerData;
   

dont les membres sont définis ainsi :

type

Always T_EventTriggerData.

event

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", soit "table_rewrite". Voir Section 40.1 pour la signification de ces événements.

parsetree

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.

tag

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