CREATE TRIGGER

Nom

CREATE TRIGGER — crée un nouveau déclencheur
CREATE TRIGGER name { BEFORE | AFTER } { event [OR ...] }
    ON table FOR EACH { ROW | STATEMENT }
    EXECUTE PROCEDURE ER">funcBLE> ( arguments )
  

Entrées

name

nom d'un déclencheur existant.

table

nom d'une table.

event

un INSERT ou DELETE ou UPDATE.

funcname

Une fonction utilisateur.

Sorties

CREATE

message retourné quand le déclencheur a été créé correctement.

Description

[1]

CREATE TRIGGER entrera un nouveau déclencheur dans la base. Le déclencheur sera associé avec la relation relname et exécutera la fonction spécifique funcname.

Le déclencheur peut être spécifié soit pour démarrer avant que l'opération soit tentée sur un tuple (avant que les contraintes soient vérifiées et les INSERT, DELETE ou UPDATE soient tentées) soit après que l'opération ait été attempted (ex. après que les contraintes soient vérifiées et les INSERT, UPDATE ou DELETE soient complétés). Si le déclencheur s'exécute avant l'événement, le déclencheur peut sauter l'opération pour le tuple courant, ou changer le tuple étant inséré (pour INSERT et UPDATE opérations seulement). Si le déclencheur s'exécute après l'événement, tous les changements, incluant la dernière insertion, mise à jour ou suppression, sont "visible" par le déclencheur.

Voir les chapitres sur SPI et les déclencheurs du PostgreSQL Programmer's Guide pour plus d'information.

Notes

CREATE TRIGGER est une extension du langage Postgres.

Seul le propriétaire de la relation peut créer un déclencheur sur cette relation.

Dans cette version (6.5), les déclencheurs STATEMENT ne sont pas implémentés.

Voir DROP TRIGGER pour savoir comment supprimer les déclencheurs.

Utilisation

Vérifie si le code distributeur spécifié existe dans la table distributors avant d'exécuter ou de mettre à jour une ligne dans la table films :
CREATE TRIGGER if_dist_exists
    BEFORE INSERT OR UPDATE ON films FOR EACH ROW
    EXECUTE PROCEDURE check_primary_key ('did', 'distributors', 'did');
   

Avant d'annuler un distributor ou de mettre à jour son code, supprimez chaque référence à la table films :
CREATE TRIGGER if_film_exists 
    BEFORE DELETE OR UPDATE ON distributors FOR EACH ROW
    EXECUTE PROCEDURE check_foreign_key (1, 'CASCADE', 'did', 'films', 'did');
   

Compatibilité

SQL92

Il n'y a pas de CREATE TRIGGER en SQL92.

L'exemple ci-dessus peut aussi être réalisé en utilisant une contrainte FOREIGN KEY :
CREATE TABLE distributors (
    did      DECIMAL(3),
    name     VARCHAR(40),
    CONSTRAINT if_film_exists
    FOREIGN KEY(did) REFERENCES films
    ON UPDATE CASCADE ON DELETE CASCADE  
);
    

Cependant, les foreign keys ne sont pas encore implémentées dans la version 6.5 de Postgres.

Notes

[1]

NdT. Un déclencheur est un mécanisme permettant d'activer une procédure cataloguée lors de l'apparition de conditions particulières dans la base de données.