Postgresql - triggers et procédures stockées

, par  admin

Bonjour,

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 :

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.

Un peu de théorie... Tous les cours théoriques