Postgresql – triggers et procédures stockées
juin 20, 2014 4:19 Laissez vos commentairesBonjour,
Nous allons dans ce tutoriel apprendre à utiliser les triggers (ou déclencheurs) sous Postgresql.
Prérequis
-* Avoir installé une base de données Postgres fonctionnelle
-* Avoir installé pgAdmin pour l’administration du serveur Postgres
Fonctionnement des triggers
Un trigger est programme qui s’exécute de manière automatique lorsqu’un événement précis intervient sur une table. Il déclenche l’exécution d’un programme issu d’une procédure stockée affectée à la table concernée.
TRIGGER INSERT
Création de la procédure stockée
Nous devons dans un premier temps créer une procédure stockée comprenant les instructions à laquelle nous associerons ensuite notre déclencheur. Executer les instructions PL/pgSQL à partir de l’éditeur SQL de pgAdmin ou directement en ligne de commande sur le serveur :
su postgres psql nomdelabase
Création de la fonction :
CREATE OR REPLACE FUNCTION fn_test_insert()
RETURNS trigger AS
$BODY$
DECLARE
BEGIN
insert into test2 (col1, col2, col3, col4) VALUES (NEW.col1, NEW.col2; NEW.col3, NEW.col4);
RETURN NEW;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION fn_test_insert()
OWNER TO postgres;
Explications : le code commence toujours par BEGIN et se termine par END.
L’enregistrement est stocké dans la variable NEW. Après l’insertion des données dans la table test, le déclencheur va exécuter la fonction et procéder ainsi à l’insertion dans la table test2 des nouveaux enregistrements (New.col1, NEW.col2…)
Création du trigger associé à la procédure stockée
Nous allons maintenant créer le trigger qui exécutera la procédure susmentionnée :
CREATE TRIGGER tr_insert_test
AFTER INSERT
ON test
FOR EACH ROW
EXECUTE PROCEDURE fn_test_insert();
Explications : Nous créons ici un déclencheur appelé « tr_insert_test » qui appellera la procédure stockée « fn_test_insert() » dès qu’une insertion sera effectuée dans la table « test ». AFTER INSERT signifie que l’instruction sera exécuter après l’insertion de la ligne dans la table test. (à ne pas utiliser pour avec DELETE, voir section concernée)
Votre premier déclencheur est prêt, pour chaque nouvelle insertion dans la table test, il y aura un ajout automatique des champs mentionnés dans la procédure stockée (NEW.col1, NEW.col2) dans la table test2.
TRIGGER DELETE
Les principe est le même à l’exception de AFTER DELETE que l’on remplacera par BEFORE DELETE si l’on souhaite conserver le type de données RECORD contenant les variables de la ligne de la table concernée. A noter que cette variable ne se nommera plus NEW mais OLD pour les suppressions d’enregistrements.
Classés dans :Postgresql
Cet article a été écrit par admin