CodeGym /Cours /SQL SELF /Débogage PL/pgSQL avec pgAdmin : breakpoints, visualisati...

Débogage PL/pgSQL avec pgAdmin : breakpoints, visualisation des variables

SQL SELF
Niveau 56 , Leçon 0
Disponible

Alors, t'as écrit ta première procédure ou fonction, tu l'as lancée, mais un truc cloche. Bien sûr, tu pourrais balancer plein de RAISE NOTICE pour piger où "le navire a touché les récifs". Mais ! Pourquoi se prendre la tête alors qu'on a pgAdmin avec son débogueur intégré ?

pgAdmin te permet d'exécuter ton code pas à pas, de poser des breakpoints, de mater les valeurs des variables et de chercher la cause des bugs. C'est littéralement ta "mallette de détective" pour élucider le mystère : "Pourquoi ma requête ne marche pas ?".

Pourquoi déboguer avec pgAdmin ?

Parfois, les bugs dans les procédures sont tellement bien planqués que tenter de les trouver juste avec les logs ou le terminal, c'est l'enfer. C'est là que le débogage pas à pas sauve la vie : tu vois tout ce qui se passe à chaque étape de ta fonction. Imagine que c'est comme faire un puzzle super compliqué, mais avec des indices.

Avec le débogage dans pgAdmin, tu peux :

  1. Poser des breakpoints — des endroits où l'exécution du code s'arrête pour que tu puisses analyser l'état actuel.
  2. Avancer pas à pas dans le code SQL — littéralement voir, ligne par ligne, quelle instruction s'exécute.
  3. Voir les valeurs des variables en temps réel — vérifier que les données sont bien transmises et traitées.
  4. Trouver où l'erreur s'est produite et piger pourquoi.

Comment commencer : préparer le débogage dans pgAdmin

Avant de te lancer dans le débogage, vérifions que tout est bien configuré.

Activer l'extension plpgsql

Assure-toi que le langage PL/pgSQL est activé dans ta base de données :

CREATE EXTENSION IF NOT EXISTS plpgsql;

Ce langage est généralement activé par défaut dans PostgreSQL, mais autant vérifier.

Vérifie que tu as pgAdmin version 4 ou plus (c'est nécessaire pour le débogage). Si tu l'as pas encore, tu peux télécharger pgAdmin sur le site officiel.

Installer l'extension pldbgapi

Pour activer le débogage PL/pgSQL dans pgAdmin, il faut activer l'extension pldbgapi :

CREATE EXTENSION IF NOT EXISTS pldbgapi;

Cette extension est spécialement faite pour bosser avec le débogueur.

Super important !!! Vérifie que t'as les droits admin sur le serveur PostgreSQL pour lancer cette requête.

Bases du débogage : poser des breakpoints

Les breakpoints, c'est des points spéciaux dans le code où l'exécution de la procédure ou fonction s'arrête, histoire de te laisser jeter un œil à ce qui se passe. C'est comme une pause sur la route : tu t'arrêtes, tu regardes la carte, puis tu repars.

Comment poser un breakpoint dans pgAdmin ?

  1. Ouvre pgAdmin et connecte-toi à ta base de données.
  2. Repère ta fonction ou procédure dans l'arbre des objets : Functions<ton schéma><ta fonction>.
  3. Fais un clic droit sur la fonction et choisis Debugging → Debug. Ça lance le débogueur.
  4. Dans la fenêtre de code qui s'ouvre, trouve la ligne où tu veux commencer le débogage et clique dans la marge à gauche. Tu verras un rond rouge — c'est ton breakpoint.

Voilà à quoi ça ressemble :

CREATE OR REPLACE FUNCTION example_function(id INTEGER)
RETURNS VOID AS $$
BEGIN
    RAISE NOTICE 'Tu as choisi id : %', id;
    -- Ici tu peux poser un breakpoint
    PERFORM some_operation(id);
END;
$$ LANGUAGE plpgsql;

Une fois le breakpoint posé, tu peux lancer ta fonction, et l'exécution s'arrêtera pile à cet endroit. Là, tu peux vérifier les valeurs des variables, les résultats des instructions précédentes et bien sûr continuer l'exécution du code.

Visualiser les variables dans pgAdmin

Savoir que ton code s'est arrêté, c'est cool. Mais c'est encore mieux de voir quelles données sont en mémoire à ce moment-là. Par exemple :

  • Quels sont les paramètres d'entrée.
  • Comment les variables ont changé après un bloc précis.
  • Ce que la requête a renvoyé à la base.

Comment voir les valeurs des variables ?

Quand l'exécution de la fonction s'arrête sur un breakpoint :

  1. Va dans l'onglet Variables en bas de la fenêtre de débogage.
  2. Là tu verras la liste de toutes les variables et leurs valeurs actuelles.

Imaginons qu'on a une fonction :

CREATE OR REPLACE FUNCTION calculate_discount(price NUMERIC, discount NUMERIC)
RETURNS NUMERIC AS $$
DECLARE
    discounted_price NUMERIC;
BEGIN
    discounted_price := price - (price * discount / 100);
    RETURN discounted_price;
END;
$$ LANGUAGE plpgsql;

Si tu poses un breakpoint sur la ligne avec discounted_price, le débogueur te montrera que les variables price et discount ont déjà des valeurs, mais discounted_price est encore vide.

Voilà à quoi ressemble la liste des variables après l'arrêt :

Variable Valeur
price 100.00
discount 15.00
discounted_price NULL

Après avoir exécuté la ligne courante, discounted_price passera à 85.00.

Exécution pas à pas du code

Dans la fenêtre du débogueur, tu peux contrôler l'exécution de ta fonction avec les boutons :

  1. Step Over — exécute l'instruction courante et passe à la suivante.
  2. Step Into — te permet de "rentrer" dans la fonction ou procédure appelée.
  3. Continue — continue l'exécution jusqu'au prochain breakpoint ou la fin.

Cas pratique : déboguer des fonctions complexes

Essayons d'écrire et de déboguer une fonction un peu plus costaud.

Exemple : traitement des commandes

CREATE OR REPLACE FUNCTION process_order(order_id INTEGER)
RETURNS TEXT AS $$
DECLARE
    order_status TEXT;
    total_amount NUMERIC;
BEGIN
    -- On définit le statut de la commande
    SELECT status INTO order_status
    FROM orders
    WHERE id = order_id;

    IF order_status = 'Pending' THEN
        -- On calcule le montant total
        SELECT SUM(price * quantity) INTO total_amount
        FROM order_items
        WHERE order_id = order_id;

        -- On met à jour le statut de la commande
        UPDATE orders
        SET status = 'Processed', processed_date = NOW()
        WHERE id = order_id;

        RETURN 'Commande traitée. Montant : ' || total_amount;
    ELSE
        RETURN 'Commande déjà traitée ou inexistante.';
    END IF;
END;
$$ LANGUAGE plpgsql;

Breakpoints possibles :

  1. Sur la ligne SELECT status INTO order_status.
  2. Sur la ligne SELECT SUM(price * quantity) INTO total_amount.

Pendant le débogage, tu peux :

  • Vérifier que order_status vaut bien 'Pending'.
  • Contrôler si total_amount est bien calculé.

Erreurs fréquentes et comment les résoudre

Pendant le débogage avec pgAdmin, tu peux tomber sur ces situations :

  1. Tu ne vois pas ta fonction dans la liste. Vérifie que la fonction existe bien dans ta base et que tu es connecté à la bonne base.
  1. Les breakpoints ne marchent pas. Vérifie que l'extension pldbgapi est activée et que t'as les droits nécessaires.

  2. Erreur de connexion du débogueur. Assure-toi que le serveur PostgreSQL est configuré pour le débogage (le paramètre shared_preload_libraries inclut pldbgapi).

Utiliser pgAdmin pour déboguer du PL/pgSQL rend le débogage super simple et intuitif. Pose un breakpoint, regarde ce que valent tes variables, corrige les soucis — t'es déjà à mi-chemin de ton appli parfaite !

2
Mission
SQL SELF, niveau 56, leçon 0
Bloqué
Débogage d'une fonction avec plusieurs variables
Débogage d'une fonction avec plusieurs variables
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION