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

Documents pareils