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 :
- Poser des breakpoints — des endroits où l'exécution du code s'arrête pour que tu puisses analyser l'état actuel.
- Avancer pas à pas dans le code SQL — littéralement voir, ligne par ligne, quelle instruction s'exécute.
- Voir les valeurs des variables en temps réel — vérifier que les données sont bien transmises et traitées.
- 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 ?
- Ouvre pgAdmin et connecte-toi à ta base de données.
- Repère ta fonction ou procédure dans l'arbre des objets : Functions → <ton schéma> → <ta fonction>.
- Fais un clic droit sur la fonction et choisis Debugging → Debug. Ça lance le débogueur.
- 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 :
- Va dans l'onglet Variables en bas de la fenêtre de débogage.
- 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 :
- Step Over — exécute l'instruction courante et passe à la suivante.
- Step Into — te permet de "rentrer" dans la fonction ou procédure appelée.
- 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 :
- Sur la ligne
SELECT status INTO order_status. - Sur la ligne
SELECT SUM(price * quantity) INTO total_amount.
Pendant le débogage, tu peux :
- Vérifier que
order_statusvaut bien'Pending'. - Contrôler si
total_amountest bien calculé.
Erreurs fréquentes et comment les résoudre
Pendant le débogage avec pgAdmin, tu peux tomber sur ces situations :
- 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.
Les breakpoints ne marchent pas. Vérifie que l'extension
pldbgapiest activée et que t'as les droits nécessaires.Erreur de connexion du débogueur. Assure-toi que le serveur PostgreSQL est configuré pour le débogage (le paramètre
shared_preload_librariesinclutpldbgapi).
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 !
GO TO FULL VERSION