Documentation PostgreSQL 7.4.29 | ||||
---|---|---|---|---|
Pr�c�dent | Arri�re rapide | Avance rapide | Suivant |
Ce chapitre d�crit l'�criture des fonctions d�clencheurs. Ces fonctions peuvent �tre �crites en C ou dans n'importe quel autre langage proc�dural disponible. Il n'est pas actuellement possible d'�crire une fonction d�clencheur en langage SQL.
Une fonction d�clencheur peut �tre d�finie pour s'ex�cuter avant ou apr�s une commande INSERT, UPDATE ou DELETE, soit une fois par ligne modifi�e soit une fois par expression SQL. Si un �l�ment d�clencheur se produit, le gestionnaire de d�clencheurs est appel� au bon moment pour g�rer l'�v�nement.
La fonction d�clencheur doit �tre d�finie avant que le d�clencheur lui-m�me puisse �tre cr��. La fonction d�clencheur doit �tre d�clar�e comme une fonction ne prenant aucun argument et retournant un type trigger. (La fonction d�clencheur re�oit ses entr�es via une structure TriggerData pass�e sp�cifiquement, et pas sous la forme d'arguments de fonctions ordinaires.)
Une fois qu'une fonction d�clencheur est cr��e, le d�clencheur (trigger) est �tabli avec CREATE TRIGGER. La m�me fonction d�clencheur est utilisable par plusieurs d�clencheurs.
Les fonctions d�clencheurs renvoient une ligne de tableau (valeur de type HeapTuple). Un d�clencheur lanc� avant une op�ration a les choix suivants :
Il peut retourner un pointeur NULL pour sauter l'op�ration pour la ligne courante (et ainsi la ligne ne sera pas ins�r�e/mise � jour/effac�e).
Pour les seuls d�clencheurs INSERT et UPDATE, la valeur de retour devient la ligne qui sera ins�r�e ou remplacera la ligne en cours de mise � jour. Ceci permet � la fonction d�clencheur de modifier la ligne en cours d'insertion ou de mise � jour.
Un d�clencheur avant, qui n'est pas con�u pour avoir l'un de ces comportements, doit prendre garde � retourner la m�me ligne que celle qui lui a �t� pass�e comme nouvelle ligne (c'est-�-dire, la nouvelle (NEW) ligne pour des d�clencheurs INSERT et UPDATE, l'ancienne (OLD) ligne pour les d�clencheurs DELETE).
La valeur de retour est ignor�e pour les d�clencheurs lanc�s apr�s une op�ration. Ils pourraient donc tr�s bien renvoyer la valeur NULL.
Si plus d'un d�clencheur est d�fini pour le m�me �v�nement sur la m�me relation, les d�clencheurs seront lanc�s dans l'ordre alphab�tique de leur nom. Dans le cas de d�clencheurs avant, les lignes, susceptibles d'�tre modifi�es, renvoy�es par chaque d�clencheur deviennent l'argument du prochain d�clencheur. Si un des d�clencheurs avant renvoie un pointeur NULL, l'op�ration est abandonn�e et les d�clencheurs suivants ne sont pas lanc�s.
Si une fonction d�clencheur ex�cute des commandes SQL, alors ces commandes peuvent relancer des d�clencheurs. On appelle ceci un d�clencheur en cascade. Il n'y a pas de limitation directe du nombre de niveaux de cascade. Il est possible que les cascades causent un appel r�cursif du m�me d�clencheur ; par exemple, un d�clencheur INSERT pourrait ex�cuter une commande qui ins�re une ligne suppl�mentaire dans la m�me table, entra�nant un nouveau lancement du d�clencheur INSERT. Il est de la responsabilit� du programmeur d'�viter les r�cursions infinies dans de tels sc�narios.
Quand un d�clencheur est d�fini, des arguments peuvent �tre sp�cifi�s pour lui. L'objectif de l'inclusion d'arguments dans la d�finition du d�clencheur est de permettre � diff�rents d�clencheurs ayant des exigences similaires d'appeler la m�me fonction. Par exemple, il pourrait y avoir une fonction d�clencheur g�n�ralis�e qui prend comme arguments deux noms de colonnes et place l'utilisateur courant dans l'une et un horodatage dans l'autre. Correctement �crit, cette fonction d�clencheur serait ind�pendante de la table particuli�re sur laquelle il se d�clenche. Ainsi, la m�me fonction pourrait �tre utilis�e pour des �v�nements INSERT sur n'importe quelle table ayant des colonnes ad�quates, pour automatiquement suivre les cr�ations d'enregistrements dans une table de transactions par exemple. Elle pourrait aussi �tre utilis�e pour suivre les derni�res mises � jours si d�finie comme un d�clencheur UPDATE.
Pr�c�dent | Sommaire | Suivant |
R�gles contre d�clencheurs | Niveau sup�rieur | Visibilit� des modifications des donn�es |