Vous êtes sur la page 1sur 13

Base de données:

automatisation de traitements
D. Peeters

Module 2 – UE 3
Objectifs du chapitre
Présenter diverses méthode facilitant
l'alimentation des données.

A. Valeurs par défaut


B. Fonctions
C. Fonctions avec déclencheurs
A. Ajouter des valeurs par
défaut
Assigner une valeur par défaut
à une colonne
● La valeur par défaut sera assignée à la place de
NULL (donc pas si on lui assigne autre chose)
● Toute colonne peut se voir assigner une valeur
par défaut:
- Soit en SQL: ajouter DEFAULT suivi d'une valeur
- Soit dans PgAdmin dans les propriétés de la table

● Cette valeur peut aussi faire appel à une


fonction:
- Par exemple : now() , current_user(), ...
CREATE TABLE rues_1866 (
id character varying,
nom character varying,
commentaire character varying,
timestmp TIMESTAMP (0) WITH TIME zone DEFAULT now() );
B. Créer des fonctions
dans PostGreSQL
Les fonctions
● Il est possible de définir soi-même une
fonction
● Différents langages sont disponibles:
- PL/pgSQL, PL/R, PL/Python, SQL, ...
● Une fonction permet de programmer des
traitement 'sur mesure'
- Par exemple :

CREATE TABLE rues_1866 (


id character varying,
nom character varying,
commentaire character varying,
timestmp TIMESTAMP (0) WITH TIME zone DEFAULT now() );
Les fonctions
CREATE OR REPLACE FUNCTION isnumeric(text) RETURNS BOOLEAN
AS $$
DECLARE x NUMERIC; Déclaration
BEGIN
x = $1::NUMERIC;
RETURN TRUE;
EXCEPTION WHEN others THEN Traitement
RETURN FALSE;
END;
$$
STRICT
LANGUAGE plpgsql IMMUTABLE;

Exemple:
SELECT isnumeric('hello');
--> FALSE
Les fonctions
CREATE FUNCTION "couches"."make_point"()
RETURNS VOID
LANGUAGE 'plpgsql'
COST 100.0
VOLATILE NOT LEAKPROOF
AS $BODY$

BEGIN

IF ( "x" IS NOT NULL AND "y" IS NOT NULL ) THEN

UPDATE "couches"."données"
SET geom = ST_SetSRID(ST_Makepoint("x", "y"), 31370)
;
END IF ; Exemple:
END; SELECT "couches"."make_point"();
$BODY$;
C. Automatiser le
déclenchement de
fonctions
Les fonctions avec déclencheur
CREATE FUNCTION "common_data"."gener_user_tmstp"() RETURNS "trigger"
AS $BODY$
BEGIN
UPDATE "common_data"."pigs21"
SET "created_by" = CURRENT_ROLE,
"created_on" = now()
where "id" = NEW."id" ;
RETURN NEW;
La fonction
END;
$BODY$
LANGUAGE plpgsql
COST 100
CALLED ON NULL INPUT
Le déclencheur
SECURITY INVOKER
VOLATILE;

CREATE TRIGGER "common_data"."creation_meta_pigs21"


AFTER INSERT ON "common_data."pigs21"
FOR EACH ROW
EXECUTE PROCEDURE "common_data"."gener_user_tmstp"();
Les fonctions avec déclencheur
● Lors d'une transaction sur la base de
données 2 enregistrements spéciaux sont
créés temporairement: NEW et OLD
● OLD contient l'enregistrement tel qu'il était
avant l'opération
● NEW contient l'enregistrement modifié
pendant l'opération et qui va être écrit dans
la table
● Dans le trigger le 'BEFORE' ou le 'AFTER'
se réfèrent au moment où le NEW est écrit
dans la table.
Les fonctions avec déclencheur
● Utilisations possibles:

➡ Ajouter des méta-données lors de


l'enregistrement de nouvelles données (qui l'a
fait, quand)

➡ Garder un historique des modifications faites.


Voir le tutoriel
Tuto_création_historique_par_trigger_postgres
ql.odt sur cafesig

➡ A vous d'en inventer !


Merci !
D. Peeters

Module 2 – UE 3

Vous aimerez peut-être aussi