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();