CREATE TRIGGER name { BEFORE | AFTER } { event [OR ...] } ON table FOR EACH { ROW | STATEMENT } EXECUTE PROCEDURE ER">funcBLE> ( arguments ) |
nom d'un déclencheur existant.
nom d'une table.
un INSERT ou DELETE ou UPDATE.
Une fonction utilisateur.
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.
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'); |
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.
[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. |