Livres de référence pour maîtriser la modélisation des données
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
CREATE TRIGGER xxx_BIR
BEFORE INSERT ON xxxxx FOR EACH ROW
EXECUTE FUNCTION xxx_BIR();
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();