Maîtriser psql
Inspection interactive : \dt, \d, requêtes et timing.
Objectifs
À la fin de cette leçon, vous saurez :
- ouvrir une session psql sur votre base ;
- utiliser les commandes backslash d'inspection ;
- exécuter et corriger du SQL en interactif.
🔗 Pour vous rafraîchir la mémoire : CRUD en SQL · jointures SQL
Se connecter
Depuis votre machine hôte, via Docker :
docker exec -it devmind-postgres-1 psql -U cours -d cours_full_stack
Vous voyez le prompt :
cours_full_stack=#
Tout ce qui précède # rappelle utilisateur@base. Vous êtes dans un client SQL interactif.
Les commandes backslash
Elles ne sont pas du SQL : ce sont des commandes du client psql.
| Commande | Effet |
|---|---|
\dt | lister les tables |
\d tasks | structure de la table tasks (colonnes, types, contraintes) |
\l | lister les bases |
\du | lister les utilisateurs |
\dn | lister les schémas |
\x | basculer l'affichage étendu (colonnes → lignes) |
\timing | chronométrer chaque requête |
\q | quitter |
\d tasks est votre meilleur ami : il révèle PK, FK, defaults — la documentation vivante de la base.
Exécuter du SQL
Tapez une requête terminée par point-virgule :
SELECT slug, title FROM courses ORDER BY position;
Sans point-virgule, psql attend la suite (prompt -#) : tapez ; pour exécuter. Les erreurs sont affichées sans casser la session — l'interactif est l'endroit idéal pour expérimenter avant de mettre du SQL dans du code.
Astuce de lecture : avec beaucoup de colonnes, activez \x pour un affichage en fiches.
Le réflexe d'exploration
Sur toute base inconnue :
\dt -- quelles tables ?
\d la_table -- quelle structure ?
SELECT COUNT(*) FROM la_table; -- combien de données ?
SELECT * FROM la_table LIMIT 5; -- à quoi ressemble une ligne ?
Quatre requêtes et vous savez tout. C'est ce que vous ferez sur la base Devmind : explorez courses, chapters, lessons, lesson_revisions — vous reconnaîtrez exactement le schéma étudié en début de cursus.
Exercice
- Connectez-vous à la base Devmind et listez ses tables.
- Affichez la structure de
lessons. - Comptez les leçons par chapitre (JOIN + GROUP BY).
- Chronométrez (
\timing) un SELECT sur lesson_revisions.
Résumé
- psql = client interactif ; backslash = inspection instantanée.
\dt,\d,\x,\qcouvrent le quotidien.- Explorer : tables → structure → compteurs → échantillon.
Correction disponibleCherchez d’abord par vous-même.Voir la correction
Correction
Réponses détaillées
Question 3.
SELECT ch.title, COUNT(l.id) AS lecons
FROM chapters ch
LEFT JOIN lessons l ON l.chapter_id = ch.id
GROUP BY ch.title
ORDER BY lecons DESC;
Le LEFT JOIN révèle aussi les chapitres vides (compteur 0) — information que masquerait un JOIN strict.