Documentation PostgreSQL 8.0.25 | ||||
---|---|---|---|---|
Pr�c�dent | Arri�re rapide | Avance rapide | Suivant |
CREATE TRIGGER nom { BEFORE | AFTER } { evenement [ OR ... ] } ON table [ FOR [ EACH ] { ROW | STATEMENT } ] EXECUTE PROCEDURE nomfonc ( arguments )
CREATE TRIGGER cr�e un nouveau d�clencheur. Le d�clencheur sera associ� avec la table sp�cifi�e et ex�cutera la fonction sp�cifi�e nomfonc lorsque certains �v�nements surviennent.
Le d�clencheur peut �tre sp�cifi� pour �tre lanc� soit avant que l'op�ration ne soit tent�e sur une ligne (avant la v�rification des contraintes et que l'INSERT, l'UPDATE ou le DELETE ne soit tent�) ou une fois que l'op�ration s'est termin�e (apr�s la v�rification des contraintes et que l'INSERT, l'UPDATE ou le DELETE ne soit termin�). Si le d�clencheur est lanc� avant l'�v�nement, le d�clencheur pourrait annuler l'op�ration pour la ligne courante ou modifier la ligne en cours d'insertion (seulement pour les op�rations INSERT et UPDATE). Si le d�clencheur se lance apr�s l'�v�nement, toute modification, incluant la derni�re insertion, mise � jour ou suppression, sont <<�visibles�>> par le d�clencheur.
Un d�clencheur qui est marqu� FOR EACH ROW est appel� pour chaque ligne que l'op�ration modifie. Par exemple, un DELETE affectant dix lignes causera le lancement de tout d�clencheur ON DELETE sur la relation cible dix fois s�par�ment, une fois pour chaque ligne supprim�e. Au contraire, un d�clencheur marqu� FOR EACH STATEMENT s'ex�cute seulement une fois pour toute op�ration donn�e, quelque soit le nombre de lignes qu'il modifie (en particulier, une op�ration qui ne modifie aucune ligne, r�sultera toujours en l'ex�cution des d�clencheurs FOR EACH STATEMENT applicables).
Si plusieurs d�clencheurs du m�me genre sont d�finis pour le m�me �v�nement, ils sont d�clench�s suivant l'ordre alphab�tique de leur nom.
SELECT ne modifie aucune ligne donc vous ne pouvez pas cr�er de d�clencheurs SELECT. Les r�gles et vues sont plus appropri�es dans de tels cas.
R�f�rez-vous � Chapitre 32 pour plus d'informations sur les d�clencheurs.
Le nom � donner au nouveau d�clencheur. Il doit �tre distinct du nom de tout autre d�clencheur pour la m�me table.
D�termine si la fonction est appel�e avant ou apr�s l'�v�nement.
Fait partie de INSERT, UPDATE ou DELETE ; ceci sp�cifie l'�v�nement qui lance le d�clencheur. Plusieurs �v�nements peuvent �tre donn�s en utilisant OR.
Le nom (pouvant �tre qualifi� du nom du sch�ma) de la table � laquelle est rattach� le d�clencheur.
Ceci sp�cifie si la proc�dure du d�clencheur doit �tre lanc�e une fois pour chaque ligne affect�e par l'�v�nement du d�clencheur ou simplement une fois par instruction SQL. Si rien n'est indiqu�, FOR EACH STATEMENT est la valeur par d�faut.
Une fonction fournie par l'utilisateur, d�clar�e comme ne prenant aucun argument et renvoyant le type trigger, qui est ex�cut�e lorsque le d�clencheur est lanc�.
Une liste optionnelle d'arguments s�par�s par des virgules � fournir � la fonction lors le d�clencheur est ex�cut�. Les arguments sont des constantes litt�rales de cha�nes. Des noms simples et des constantes num�riques peuvent �tre �crits ici aussi mais ils seront tous convertis en cha�ne. Merci de v�rifier la description du langage d'impl�mentation de la fonction d�clencheur sur la fa�on dont les arguments du d�clencheur sont accessibles � l'int�rieur d'une fonction ; cela pourrait �tre diff�rents des arguments de fonctions standards.
Pour cr�er un d�clencheur sur une table, l'utilisateur doit poss�der le droit TRIGGER sur la table.
Dans les versions de PostgreSQL ant�rieures � la 7.3, il �tait n�cessaire de d�clarer que les fonctions d�clencheur renvoyaient un type opaque, plut�t que trigger. Pour supporter le chargement des anciens fichiers de sauvegarde, CREATE TRIGGER acceptera qu'une fonction d�clare une valeur de retour de type opaque mais il affichera un message d'avertissement et modifiera le type de retour d�clar� de la fonction par trigger.
Utilisez DROP TRIGGER pour supprimer un d�clencheur.
L'instruction CREATE TRIGGER de PostgreSQL impl�mente un sous-ensemble du standard SQL:1999. (Il n'existe rien sur les d�clencheurs dans SQL-92.) Les fonctionnalit�s manquantes sont :
SQL:1999 permet aux d�clencheurs de se lancer dans des mises � jour de colonnes sp�cifiques (c'est-�-dire AFTER UPDATE OF col1, col2).
SQL:1999 vous permet de d�finir des alias pour les lignes <<�old�>> et <<�new�>> ou pour les tables � utiliser dans la d�finition des actions d�clench�es (c'est-�-dire CREATE TRIGGER ... ON nomtable REFERENCING OLD ROW AS unnom NEW ROW AS unautrenom ...). Comme PostgreSQL autorise l'�criture de proc�dures pour d�clencheurs dans tout langage d�fini par l'utilisateur, l'acc�s aux donn�es est g�r� d'une fa�on sp�cifique � chaque langage.
PostgreSQL permet seulement l'ex�cution d'une fonction d�finie par l'utilisateur pour l'action d�clench�e. SQL:1999 permet l'ex�cution d'un certain nombres d'autres commandes SQL, telles que CREATE TABLE comme action d�clench�e. Cette limitation n'est pas difficile � contourner en cr�ant une fonction d�finie par l'utilisateur et qui ex�cute les commandes d�sir�es.
SQL:1999 sp�cifie que les d�clencheurs multiples devraient �tre lanc�s dans l'ordre de leur cr�ation. PostgreSQL utilise l'ordre alphab�tique de leur nom, ce qui a �t� jug� plus agr�able � utiliser.
La capacit� � sp�cifier plusieurs actions pour un simple d�clencheur en utilisant OR est une extension PostgreSQL du standard SQL.
Pr�c�dent | Sommaire | Suivant |
CREATE TABLESPACE | Niveau sup�rieur | CREATE TYPE |