Trigger en Postgresql - Etud.insa
Transcription
Trigger en Postgresql - Etud.insa
Trigger en Postgresql Mahuna AKPLOGAN1 , Rim AKROUT2 1 [email protected] 2 [email protected] Table des matières 1 A quoi servent les triggers ? 2 Comment ça marche ? 2.1 Préalable . . . . . . . 2.2 Description . . . . . . 2.3 Mon premier trigger . . 2.4 Dfinition des fonctions 2.5 Cration des triggers . . 2.6 Insertion des donnes . 3 Conclusion 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 2 2 2 3 3 3 3 MIC-3 INSA, Toulouse 1 A quoi servent les triggers ? Les triggers permettent d’assurer une parfaite intégrité des données. Le mot trigger peut être traduit par "déclencheur" en français. Un trigger est un script qui se déclenche sur certains évènements de la base de données. Les triggers se définissent sur les objets de type TABLE. Elles se rapporttent aux évènements suivants : INSERT, UPDATE, DELETE et peuvent être déclenchés avant (BEFORE) ou après (AFTER) un évènement donné. Ainsi ce méchanisme permet d’exécuter du code, avant ou après un évènement. 2 Comment ça marche ? 2.1 Préalable Avant toute déclaration ou manipulation de trigger, il est nécessaire de déclarer (une fois seulement) à l’interprète Postgres SQL que l’on travaille avec le langage plpgsql par l’ordre suivant : 1 CREATE LANGUAGE PLPGSQL; 2.2 Description La syntaxe d’un trigger est la suivante : 1 2 3 4 CREATE TRIGGER nom_trigger {BEFORE | AFTER} {INSERT | UPDATE | DELETE} ON nom_table code La trigger ainsi définit est associ une table. On peut associer une procdure au trigger. Cette procdure trigger est cre en utilisant la commande CREATE FUNCTION. Cette fonction est dclenche sur les vnements spcifis dans le trigger. Afin de dfinir la corps de votre procdure trigger, plusieurs variables spciales sont cres automatiquement. Les plus attractives sont les pseudo tables OLD et NEW qui contiennent les donnes en cours d’insertion, de mise jour ou de suppression. NEW : contient la nouvelle ligne de base de donnes pour les vnements de type INSERT et UPDATE. OLD : contient l’ancienne ligne de base de donnes pour les vnements de type UPDATE et DELETE 2.3 Mon premier trigger 2.3.1 Création des tables Nous allons créer une table "Employee" contenant trois champs en utilisant un interprteur comme psql. 1 2 3 4 5 CREATE TABLE ‘‘Employee‘‘( ‘‘nom_employe‘‘ text, ‘‘salaire‘‘ integer, ‘‘utilisateur_dermodif‘‘ text ); En tapant la commande $ dt dans le terminal, vous obtenez Liste des relations Schma | Nom | Type | Propritaire --------+-------------+-------+-------------public | Employee | table | user1 public | maTable | table | user1 (2 lignes) MIC-3 INSA, Toulouse 2.4 Dfinition des fonctions Dfinissons une procdure trigger fct() qui vrifie que nom_employe est diffrent de NULL. 1 2 3 4 5 6 7 8 CREATE FUNCTION fct() RETURNS trigger AS $fct$ BEGIN IF NEW.nom_employe IS NULL THEN RAISE EXCEPTION ‘nom_employe ne peut pas tre NULL‘; END IF; RETURN NEW; END; $fct$ LANGUAGE plpgsql; La procdure fct() tant cre, nous pouvons maintenant crer notre trigger. 2.5 Cration des triggers CREATE TRIGGER trig BEFORE INSERT OR UPDATE ON ‘‘Employee‘‘ FOR EACH ROW EXECUTE PROCEDURE fct(); 1 2 3 4 2.6 Insertion des donnes INSERT INTO Employee VALUES(‘Toto‘, 154, ‘Tata‘ ); INSERT INTO Employee VALUES(NULL, 154, ‘Titi‘ ); 1 2 En excutant ces deux requtes vous remarquerez que la seconde insertion choue car nom_employe=NULL. 3 Conclusion Ce document n’est qu’un aperu des triggers. Pour plus d’informations : – http ://docs.postgresql.fr/8.4/ – http ://docs.postgresql.fr/8.4/triggers.html – http ://www.postgresql.org/docs/8.0/static/triggers.html