Qu'est-ce que sont les déclencheurs ?

PostgreSQL offre un riche panel de déclencheurs.

Pour la génération des APIs de tables de ce site, nous avons retenus les 6 déclencheurs obéissant aux 2 jeux de critères ci-après :

  • Avant ou après la manipulation de table [BEFORE | AFTER]

  • Selon la nature de la manipulation [INSERT | UPDATE | DELETE ]

Nous utiliserons ces 6 déclencheurs au niveau de la manipulation des tables.

Dans PostgreSQL, tout déclencheur (trigger) doit invoquer une fonction déclencheur. Cette dernière contiendra l'implémentation de la logique de traitement

Commande symbolique de création d'un trigger

Exemple pour un trigger avant insertion d'un tuple

CREATE TRIGGER xxx_BIR

BEFORE INSERT ON xxxxx FOR EACH ROW

EXECUTE FUNCTION xxx_BIR();

Exemple de création d'un trigger et de sa procédure associée (extrait)


CREATE OR REPLACE FUNCTION Usa_BIR() RETURNS TRIGGER

LANGUAGE plpgsql AS $BODY$

DECLARE

tableName VARCHAR;

BEGIN

tableName := TG_TABLE_NAME;

-- Calcul de la valeur de colonne de clé primaire de table indépendante ou dépendante

IF NEW.num IS NULL THEN

NEW.num := NEXTVAL('Usa_SEQPK');

END IF;


-- Contrôle du ou des types de données des colonnes autres que PK et FK

IF NEW.code IS NOT NULL THEN

CALL check_normalizedstring(NEW.code, tableName, 'code','word');

CALL check_token(NEW.code, tableName, 'code','word');

CALL check_word(NEW.code, tableName, 'code','word');

END IF;

IF NEW.libelle IS NOT NULL THEN

CALL check_normalizedstring(NEW.libelle, tableName, 'libelle','token');

CALL check_token(NEW.libelle, tableName, 'libelle','token');

END IF;

[...]

-- Calcul de la ou des valeurs de colonnes d'ordonnancement

IF NEW.ordre IS NULL THEN

SELECT COALESCE(MAX(ordre), 0) + 10

INTO NEW.ordre

FROM Usages;

END IF;


RETURN NEW;

END; $BODY$;



CREATE TRIGGER Usa_BIR

BEFORE INSERT ON Usages FOR EACH ROW

EXECUTE FUNCTION Usa_BIR();