Triggers et fonctions
Un trigger ou déclencheur est associé à une table ou une vue. Il permet d'exécuter automatiquement des actions lorsque certains événements surviennent sur sa table ou sa vue de rattachement. Il peut :
s'enclencher avant que l'événement ait lieu (BEFORE), pour par exemple vérifier ou modifier les données qui seront insérées ou mises à jour.
s'enclencher après que l'événement ait lieu (AFTER), permettant par exemple de propager des mises à jour vers d'autres tables ou pour réaliser des tests de cohérence.
Ou effectuer d'autres événements à la place de celui prévu initialement (INSTEAD OF) permettant par exemple de simuler une vue « modifiable » (voir cependant le paragraphe sur les vues modifiables dans la documentation de PostgreSQL). INSTEAD OF ne s'applique que pour les vues.
Un trigger exécute une fonction qui doit être créée au préalable.
PostgreSQL propose quatre types de fonction :
fonctions en langage procédural (PL/pgSQL, PL/Tcl, PL/Perl et PL/Python)
Nous allons voir quelques exemples d'utilisation en pgpsql.
La commande pour créer un trigger est :
CREATE [ CONSTRAINT ] TRIGGER nom { BEFORE | AFTER | INSTEAD OF } { événement [ OR ... ] }
ON nom_table
[ FROM nom_table_referencee ]
[ NOT DEFERRABLE | [ DEFERRABLE ] { INITIALLY IMMEDIATE | INITIALLY DEFERRED } ]
[ FOR [ EACH ] { ROW | STATEMENT } ]
[ WHEN ( condition ) ]
EXECUTE PROCEDURE nom_fonction ( arguments )
Cette commande permet :
d'associer le trigger à sa table ou sa vue
d'indiquer son type (BEFORE, AFTER, ou INSTEAD OF)
de définir les événements déclenchant (INSERT, UPDATE, DELETE, ou TRUNCATE, + CREATE, ALTER et DROP à partir de PostgreSQL 9.3)
d'indiquer s'il se déclenche pour chaque ligne (FOR EACH ROW) ou une fois pour l'ensemble (FOR EACH STATEMENT).
d'associer la fonction qui devra se déclencher.
Complément : Pour en savoir plus...
Il n'est pas possible de détailler dans ce cours le langage pgpsql. On trouvera, par exemple ici une bonne introduction.