CodeGym /Cours /SQL SELF /Logging avec RAISE NOTICE

Logging avec RAISE NOTICE

SQL SELF
Niveau 52 , Leçon 1
Disponible

Le logging, c'est le process d'enregistrer des événements importants et des infos sur le fonctionnement de ton appli ou de ta base de données. En PL/pgSQL, c'est super utile surtout quand tu crées des fonctions complexes qui appellent d'autres fonctions, bossent avec des triggers ou font plein d'étapes. Voilà quelques raisons clés pour lesquelles le logging est indispensable :

  1. Debug du code : le logging t'aide à piger ce qui se passe à chaque étape de l'exécution de ta fonction.
  2. Diagnostic des problèmes : si ta fonction ne marche pas comme prévu, les logs t'aideront à trouver où ça coince.
  3. Analyse de l'exécution : savoir quelles étapes ont été faites (et dans quel ordre), ça te permet d'optimiser les perfs ou de repérer des trucs à améliorer.
  4. Facilité de maintenance : imagine, dans un an tu rouvres ta fonction et tu piges plus rien (et crois-moi, ça arrive). Les logs te sauvent dans ces moments-là.

RAISE NOTICE — la base du logging

Si t'es dev et que t'as déjà utilisé print() ou console.log() pour débugger, alors RAISE NOTICE c'est un peu leur grand frère dans le monde PostgreSQL. C'est une commande qui affiche des messages d'info pendant l'exécution d'une fonction. Ces messages sont visibles dans la console, le terminal ou l'interface où tu lances ta requête.

Syntaxe de RAISE NOTICE

RAISE NOTICE 'Message d'exécution';

Mais c'est que le début. Tu peux inclure des variables dans tes messages pour les rendre plus parlants :

RAISE NOTICE 'Valeur actuelle de la variable : %', my_variable;

Ici, % sert de placeholder, et my_variable c'est la variable dont tu veux afficher la valeur.

Si tu veux afficher plusieurs variables, tu peux faire comme ça :

RAISE NOTICE 'Valeurs : % et %', var1, var2;

Exemples d'utilisation de RAISE NOTICE

1. Affichage de la valeur d'une variable. On déclare une variable dans une fonction et on affiche sa valeur avec RAISE NOTICE.

CREATE OR REPLACE FUNCTION debug_variable_example()
RETURNS VOID AS $$
DECLARE
    my_variable INTEGER := 42;
BEGIN
    RAISE NOTICE 'Valeur de la variable my_variable : %', my_variable;
END;
$$ LANGUAGE plpgsql;

Quand tu appelles cette fonction :

SELECT debug_variable_example();

Dans les résultats tu verras un truc du genre :

NOTICE:  Valeur de la variable my_variable : 42

2. Logging des étapes d'exécution. Imagine que t'as une fonction qui doit faire plusieurs étapes. Tu peux ajouter RAISE NOTICE après chaque action pour vérifier que tout roule.

CREATE OR REPLACE FUNCTION process_data()
RETURNS VOID AS $$
BEGIN
    RAISE NOTICE 'Étape 1 : début du process';

    -- Ici, on exécute du code SQL
    PERFORM pg_sleep(1); -- Simulation d'une opération

    RAISE NOTICE 'Étape 2 : process en cours';

    -- Encore un peu de SQL
    PERFORM pg_sleep(1); -- Simulation d'une opération

    RAISE NOTICE 'Étape 3 : process terminé';
END;
$$ LANGUAGE plpgsql;

En appelant la fonction :

SELECT process_data();

Tu obtiens :

NOTICE:  Étape 1 : début du process
NOTICE:  Étape 2 : process en cours
NOTICE:  Étape 3 : process terminé

Comme ça, tu sais toujours à quelle étape t'en es.

Application pratique

Regardons un exemple de logging de calculs. On va créer une fonction qui calcule la somme des nombres de 1 à N et log le process :

CREATE OR REPLACE FUNCTION sum_with_logging(n INTEGER)
RETURNS INTEGER AS $$
DECLARE
    total INTEGER := 0;
    i INTEGER;
BEGIN
    RAISE NOTICE 'Début des calculs pour n = %', n;

    FOR i IN 1..n LOOP
        total := total + i;
        RAISE NOTICE 'Somme à l'étape % : %', i, total;
    END LOOP;

    RAISE NOTICE 'Résultat des calculs : %', total;

    RETURN total;
END;
$$ LANGUAGE plpgsql;

En appelant cette fonction avec le paramètre 5 :

SELECT sum_with_logging(5);

Tu obtiens :

NOTICE:  Début des calculs pour n = 5
NOTICE:  Somme à l'étape 1 : 1
NOTICE:  Somme à l'étape 2 : 3
NOTICE:  Somme à l'étape 3 : 6
NOTICE:  Somme à l'étape 4 : 10
NOTICE:  Somme à l'étape 5 : 15
NOTICE:  Résultat des calculs : 15

Quelques tips pour le logging

  1. Vire les logs inutiles : quand ta fonction est prête et débuggée, enlève les messages RAISE NOTICE en trop pour pas polluer le terminal ou l'interface utilisateur.
  2. Utilise des messages explicites : écris pas juste "Étape 1", "Étape 2". Dis ce que fait chaque étape.
  3. Fais gaffe aux infos sensibles : mets jamais dans les logs des données de carte bancaire, des mots de passe ou d'autres infos confidentielles.
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION