🔝 Retour au Sommaire
pgAdmin est l'interface graphique officielle pour gérer PostgreSQL. Au lieu de taper des commandes SQL dans un terminal, vous pouvez gérer vos bases de données, utilisateurs, tables et requêtes via une interface web moderne et intuitive.
Cette fiche vous guide pour déployer pgAdmin aux côtés de PostgreSQL avec Docker, et les connecter ensemble.
Ce que vous allez apprendre :
- Installer pgAdmin avec Docker Compose
- Connecter pgAdmin à PostgreSQL
- Naviguer dans l'interface pgAdmin
- Gérer bases de données et utilisateurs graphiquement
- Exécuter des requêtes SQL avec l'éditeur intégré
- Sauvegarder et restaurer des bases
Durée estimée : 15-20 minutes
À la fin de cette fiche, vous aurez :
- ✅ pgAdmin fonctionnel et accessible via navigateur
- ✅ PostgreSQL connecté à pgAdmin
- ✅ Une interface moderne pour gérer vos bases
- ✅ La capacité d'exécuter des requêtes visuellement
- ✅ Des outils pour explorer et visualiser vos données
Avant de commencer :
- ✅ PostgreSQL installé et fonctionnel (Configuration basique)
- ✅ Docker Compose configuré
- ✅ Un navigateur web moderne
pgAdmin est l'outil officiel d'administration pour PostgreSQL, développé par la communauté PostgreSQL.
| Aspect | Description |
|---|---|
| Type | Interface web (accessible via navigateur) |
| Langage | Python (Flask + JavaScript) |
| Licence | Open source (PostgreSQL License) |
| Plateforme | Multi-plateforme (Windows, macOS, Linux) |
| Version Docker | Conteneur officiel pgAdmin 4 |
| Avantage | Description |
|---|---|
| 🖱️ Interface Graphique | Plus accessible que la ligne de commande |
| 📊 Visualisation | Voir la structure des tables, relations, index |
| ⚡ Éditeur SQL | Autocomplétion, coloration syntaxique |
| 📈 Dashboard | Monitoring des performances en temps réel |
| 🔧 Outils intégrés | Import/Export CSV, backup/restore |
| 🌐 Accessible partout | Via navigateur, pas d'installation locale |
| Outil | Avantage | Inconvénient |
|---|---|---|
| pgAdmin | Officiel, complet, gratuit | Plus lourd, interface dense |
| DBeaver | Universel (toutes BDD), léger | Moins spécialisé PostgreSQL |
| DataGrip | Professionnel, puissant | Payant |
| psql | Rapide, léger | Ligne de commande uniquement |
Modifiez votre docker-compose.yml pour ajouter pgAdmin :
version: '3.8'
services:
# PostgreSQL
postgres:
image: postgres:15
container_name: postgres_dev
restart: unless-stopped
environment:
POSTGRES_PASSWORD: changez_moi_123!
POSTGRES_DB: ma_base
POSTGRES_USER: mon_utilisateur
ports:
- "5432:5432"
volumes:
- ./data/postgres:/var/lib/postgresql/data
networks:
- postgres_network
# ✨ pgAdmin
pgadmin:
image: dpage/pgadmin4:latest
container_name: pgadmin_dev
restart: unless-stopped
environment:
# Email de connexion à pgAdmin
PGADMIN_DEFAULT_EMAIL: admin@example.com
# Mot de passe de connexion à pgAdmin
# ⚠️ CHANGEZ CE MOT DE PASSE !
PGADMIN_DEFAULT_PASSWORD: admin_password_123!
# Désactiver le mode serveur (plus simple pour dev)
PGADMIN_CONFIG_SERVER_MODE: 'False'
# Désactiver la vérification du mot de passe maître
PGADMIN_CONFIG_MASTER_PASSWORD_REQUIRED: 'False'
ports:
# pgAdmin sera accessible sur http://localhost:5050
- "5050:80"
volumes:
# Persistance des paramètres pgAdmin
- ./data/pgadmin:/var/lib/pgadmin
networks:
- postgres_network
# Attendre que PostgreSQL soit prêt
depends_on:
- postgres
networks:
postgres_network:
driver: bridge| Paramètre | Description | Valeur Recommandée |
|---|---|---|
PGADMIN_DEFAULT_EMAIL |
Email pour se connecter à pgAdmin | Votre email |
PGADMIN_DEFAULT_PASSWORD |
Mot de passe pgAdmin | À changer absolument |
PGADMIN_CONFIG_SERVER_MODE |
Mode multi-utilisateurs | False (dev), True (prod) |
PGADMIN_CONFIG_MASTER_PASSWORD_REQUIRED |
Mot de passe maître | False (dev) |
ports: "5050:80" |
Port d'accès web | 5050 (évite conflit avec port 80) |
./data/pgadmin |
Données pgAdmin | Conserve les connexions/préférences |
admin@example.com et admin_password_123! par vos propres valeurs.
# Créer les dossiers pour les volumes
mkdir -p data/postgres data/pgadmin
# Définir les permissions pour pgAdmin (important sur Linux)
sudo chown -R 5050:5050 data/pgadmin
# Ou alternative (moins sécurisé mais fonctionne)
chmod -R 777 data/pgadminNote Windows/macOS : Pas besoin de chown, Docker gère automatiquement.
# Arrêter l'ancienne configuration (si existante)
docker-compose down
# Démarrer PostgreSQL + pgAdmin
docker-compose up -dSortie attendue :
Creating network "postgres-docker_postgres_network" with driver "bridge"
Creating postgres_dev ... done
Creating pgadmin_dev ... done
# Voir les conteneurs
docker-compose psRésultat attendu :
Name Command State Ports
--------------------------------------------------------------------------------
pgadmin_dev /entrypoint.sh Up 443/tcp, 0.0.0.0:5050->80/tcp
postgres_dev docker-entrypoint.sh postgres Up 0.0.0.0:5432->5432/tcp
✅ Les deux services doivent être Up.
# Logs pgAdmin
docker-compose logs -f pgadmin
# Logs PostgreSQL
docker-compose logs -f postgres-
Ouvrez votre navigateur (Chrome, Firefox, Edge, Safari...)
-
Accédez à l'URL : http://localhost:5050
-
Page de connexion :
- Email :
admin@example.com(celui défini dans docker-compose.yml) - Password :
admin_password_123!(celui défini dans docker-compose.yml)
- Email :
-
Cliquez sur "Login"
![Interface de connexion pgAdmin]
Si tout fonctionne : Vous arrivez sur le tableau de bord pgAdmin ! 🎉
L'interface pgAdmin est organisée en 3 zones :
┌────────────────────────────────────────────────────┐
│ [Menu Bar] Dashboard | Tools | Help │
├──────────┬─────────────────────────────────────────┤
│ │ │
│ Object │ Main Panel │
│ Browser │ (Tableaux, graphiques, SQL...) │
│ (Arbre) │ │
│ │ │
│ Servers │ │
│ ├─ DB1 │ │
│ ├─ DB2 │ │
│ └─ ... │ │
│ │ │
└──────────┴─────────────────────────────────────────┘
-
Clic droit sur "Servers" (dans l'arbre à gauche)
- Ou cliquez sur "Add New Server"
-
Onglet "General" :
Champ Valeur Name PostgreSQL Dev(nom descriptif) -
Onglet "Connection" :
Champ Valeur Explication Host name/address postgresNom du service dans docker-compose Port 5432Port par défaut PostgreSQL Maintenance database postgresBase système Username mon_utilisateurDéfini dans docker-compose Password changez_moi_123!Défini dans docker-compose Save password? ✅ Coché Pour ne pas retaper à chaque fois -
Cliquez sur "Save"
postgres comme hostname (nom du conteneur), pas localhost ou 127.0.0.1. Les conteneurs communiquent via leurs noms de service Docker.
Dans l'arbre à gauche, vous devriez voir :
Servers
└── PostgreSQL Dev
└── Databases (X)
├── ma_base
├── postgres
├── template0
└── template1
Si vous voyez cet arbre → ✅ Connexion réussie !
En cas d'erreur → Voir Section Dépannage
-
Développez l'arbre :
PostgreSQL Dev └── Databases └── ma_base ├── Schemas │ └── public │ ├── Tables │ ├── Views │ ├── Functions │ └── ... ├── Extensions └── ... -
Cliquez sur "Tables" pour voir vos tables
-
Clic droit sur une table → Options :
- View/Edit Data : Voir les données
- Properties : Structure de la table
- Maintenance : VACUUM, ANALYZE
- Backup : Sauvegarder
- Drop : Supprimer (
⚠️ dangereux)
-
Clic droit sur "Databases" → Create → Database...
-
Onglet "General" :
Champ Valeur Database blog_dbOwner mon_utilisateurComment Description (optionnel) -
Onglet "Definition" :
Champ Valeur Encoding UTF8Template template0Collation en_US.utf8 -
Cliquez sur "Save"
La nouvelle base apparaît dans l'arbre ! 🎉
-
Développez :
blog_db→Schemas→public→ Clic droit sur "Tables" -
Create → Table...
-
Onglet "General" :
- Name :
articles
- Name :
-
Onglet "Columns" → Cliquez sur "+" pour chaque colonne :
Name Data type Length Not NULL? Primary key? idinteger- ✅ ✅ (via Constraints) titlecharacter varying200 ✅ ❌ contenttext- ❌ ❌ created_attimestamp- ❌ ❌ -
Onglet "Constraints" → Ajouter la clé primaire :
- Primary Key sur
id - Ou cocher "Primary key?" directement dans l'onglet Columns
- Primary Key sur
-
Cliquez sur "Save"
-
Clic droit sur votre table → View/Edit Data → All Rows
-
Une grille s'affiche (vide au début)
-
Cliquez sur la dernière ligne (icône
+) -
Remplissez les champs :
id: 1title: Mon premier articlecontent: Ceci est le contenu...created_at: 2024-10-29 14:30:00
-
Cliquez sur "Save Data Changes" (icône disquette)
-
Les données sont insérées !
Alternative (plus rapide) : Utilisez l'éditeur SQL (voir section suivante).
-
Clic droit sur
blog_db→ Query Tool -
Éditeur SQL s'ouvre avec autocomplétion
-
Tapez votre requête :
-- Créer une table CREATE TABLE utilisateurs ( id SERIAL PRIMARY KEY, nom VARCHAR(100) NOT NULL, email VARCHAR(100) UNIQUE NOT NULL, created_at TIMESTAMP DEFAULT NOW() ); -- Insérer des données INSERT INTO utilisateurs (nom, email) VALUES ('Alice', 'alice@example.com'), ('Bob', 'bob@example.com'), ('Charlie', 'charlie@example.com'); -- Sélectionner SELECT * FROM utilisateurs;
-
Exécutez :
- F5 ou Icône
▶️ : Exécute toute la requête - Sélection + F5 : Exécute uniquement la partie sélectionnée
- F5 ou Icône
-
Résultats s'affichent dans l'onglet "Data Output"
Raccourcis utiles :
Ctrl + Space: AutocomplétionCtrl + /: Commenter/décommenterF7: Formater le SQL (indentation)F5: ExécuterCtrl + S: Sauvegarder la requête
-
Clic droit sur une table → View/Edit Data → All Rows
-
Fonctionnalités :
- 🔍 Filtrer : Cliquez sur l'icône filtre
- 📊 Trier : Cliquez sur les en-têtes de colonnes
- ✏️ Modifier : Double-cliquez sur une cellule
- ➕ Ajouter : Cliquez sur la dernière ligne
- ❌ Supprimer : Sélectionnez ligne + icône poubelle
-
Export :
- Icône téléchargement : Export CSV, JSON, etc.
-
Développez :
PostgreSQL Dev→ Login/Group Roles -
Clic droit → Create → Login/Group Role...
-
Onglet "General" :
- Name :
blog_app
- Name :
-
Onglet "Definition" :
- Password :
app_password_123!
- Password :
-
Onglet "Privileges" :
- Can login? : ✅ Oui
- Superuser? : ❌ Non
- Create databases? : Selon besoin
-
Cliquez sur "Save"
-
Accorder des permissions :
- Allez sur la base
blog_db - Onglet "Security" → Cliquez sur "+"
- Sélectionnez
blog_app - Cochez les privilèges :
CONNECT,TEMPORARY,CREATE
- Allez sur la base
-
Cliquez sur votre serveur dans l'arbre
-
Onglet "Dashboard" affiche :
- 📊 Activité serveur (connexions, transactions)
- 💾 Utilisation disque
- 🔄 Activité des sessions
- 📈 Graphiques temps réel
-
Onglet "Statistics" :
- Détails par base de données
- Nombre de connexions
- Taille des tables
-
Utile pour :
- Surveiller les performances
- Identifier les requêtes lentes
- Voir les connexions actives
-
Clic droit sur
blog_db→ Backup... -
Onglet "General" :
Champ Valeur Filename /tmp/blog_db_backup.sqlFormat Plain (SQL), Custom, Directory, Tar Encoding UTF8 -
Onglet "Data/Objects" :
- Blobs : ✅ (si vous avez des fichiers binaires)
- Only data : Pour sauvegarder uniquement les données
- Only schema : Pour sauvegarder uniquement la structure
-
Cliquez sur "Backup"
-
Télécharger le fichier depuis le conteneur :
docker cp pgadmin_dev:/tmp/blog_db_backup.sql ./backup_blog_db.sql
-
Créez une nouvelle base (si nécessaire) :
blog_db_restored -
Clic droit sur
blog_db_restored→ Restore... -
Onglet "General" :
Champ Valeur Filename /tmp/blog_db_backup.sql(uploader d'abord)Format Custom (selon format de sauvegarde) -
Uploader le backup dans le conteneur :
docker cp ./backup_blog_db.sql pgadmin_dev:/tmp/blog_db_backup.sql
-
Dans pgAdmin → Restore...
-
Cliquez sur "Restore"
-
La base est restaurée !
Alternative (plus rapide via psql) :
# Backup
docker exec postgres_dev pg_dump -U mon_utilisateur blog_db > backup.sql
# Restore
docker exec -i postgres_dev psql -U mon_utilisateur -d blog_db_restored < backup.sqlVous pouvez connecter pgAdmin à plusieurs serveurs PostgreSQL :
services:
postgres_dev:
# ... (comme avant)
postgres_test:
image: postgres:15
container_name: postgres_test
environment:
POSTGRES_PASSWORD: test_password
ports:
- "5433:5432"
networks:
- postgres_networkDans pgAdmin, ajoutez un deuxième serveur avec postgres_test comme hostname.
Les connexions pgAdmin sont sauvegardées dans ./data/pgadmin/. Tant que ce dossier existe, vos connexions sont préservées.
Pour un usage en équipe :
environment:
PGADMIN_CONFIG_SERVER_MODE: 'True'
PGADMIN_CONFIG_MASTER_PASSWORD_REQUIRED: 'True'Chaque utilisateur aura son propre compte pgAdmin.
-
File → Preferences
-
Options disponibles :
- Browser : Thème clair/sombre
- Query Tool : Taille police, thème éditeur
- Display : Langue (dont français)
- Miscellaneous : Diverses options
-
Thème sombre :
- File → Preferences → Miscellaneous → Themes
- Sélectionnez "Dark"
Causes possibles :
-
PostgreSQL pas démarré :
docker ps # Vérifiez que postgres_dev est UP -
Mauvais hostname :
- Utilisez
postgres(nom du service), paslocalhost
- Utilisez
-
Mauvais identifiants :
- Vérifiez
POSTGRES_USERetPOSTGRES_PASSWORDdans docker-compose.yml
- Vérifiez
-
Pare-feu/Réseau :
- Les deux conteneurs doivent être sur le même réseau Docker
Solution :
# Voir les logs PostgreSQL
docker-compose logs postgres
# Voir les logs pgAdmin
docker-compose logs pgadmin
# Tester la connexion depuis pgAdmin
docker exec -it pgadmin_dev ping postgresCause : Problème de permissions (Linux).
Solution :
# Option 1 : Changer le propriétaire
sudo chown -R 5050:5050 data/pgadmin
# Option 2 : Permissions larges (moins sécurisé)
chmod -R 777 data/pgadmin
# Redémarrer
docker-compose restart pgadminCause : pgAdmin met 10-20 secondes à démarrer (normal).
Solution : Patience ! Surveillez les logs :
docker-compose logs -f pgadmin
# Attendez "Listening at: http://0.0.0.0:80"Cause : Identifiants incorrects.
Solution :
-
Vérifiez dans docker-compose.yml :
POSTGRES_USERPOSTGRES_PASSWORD
-
Dans pgAdmin, lors de l'ajout du serveur, utilisez exactement ces valeurs
-
Si vous avez changé le mot de passe :
docker-compose down rm -rf data/postgres docker-compose up -d
Solution :
- File → Preferences
- Miscellaneous → User Language
- Sélectionnez "French"
- Rafraîchissez la page (F5)
| Tâche | pgAdmin | psql (CLI) | Recommandation |
|---|---|---|---|
| Explorer la structure | ⭐⭐⭐⭐⭐ Visuel | ⭐⭐ \dt, \d table |
pgAdmin |
| Créer des tables | ⭐⭐⭐⭐ Formulaires | ⭐⭐⭐⭐⭐ CREATE TABLE | Selon préférence |
| Requêtes simples | ⭐⭐⭐⭐ Éditeur | ⭐⭐⭐⭐⭐ Rapide | psql |
| Requêtes complexes | ⭐⭐⭐⭐⭐ Autocomplétion | ⭐⭐⭐ Basique | pgAdmin |
| Voir les données | ⭐⭐⭐⭐⭐ Grille | ⭐⭐⭐ SELECT | pgAdmin |
| Backup/Restore | ⭐⭐⭐⭐ GUI | ⭐⭐⭐⭐⭐ Scripts | Selon contexte |
| Performance | ⭐⭐⭐ Plus lourd | ⭐⭐⭐⭐⭐ Léger | psql |
| Débutants | ⭐⭐⭐⭐⭐ Très accessible | ⭐⭐ Intimidant | pgAdmin |
Verdict : Utilisez les deux ! pgAdmin pour explorer et visualiser, psql pour les opérations rapides et scripts.
Avant de considérer votre configuration pgAdmin prête :
- pgAdmin démarré (
docker psmontre le conteneur) - Accessible sur http://localhost:5050
- Connexion à l'interface réussie
- Serveur PostgreSQL ajouté dans pgAdmin
- Connexion réussie (arbre des bases visible)
- Toutes les bases de données apparaissent
- Query Tool fonctionne (exécution de requêtes)
- View/Edit Data fonctionne (visualisation)
- Backup fonctionne (sauvegarde testée)
- Permissions correctes sur ./data/pgadmin
- Mot de passe pgAdmin changé (pas admin)
- Mot de passe PostgreSQL fort
- Données dans ./data (persistance)
- Port 5050 non exposé publiquement (dev uniquement)
Maintenant que pgAdmin est configuré :
-
Explorer les annexes :
-
Déployer des stacks complètes :
-
Découvrir d'autres bases de données :
-
Approfondir PostgreSQL :
- pgAdmin Documentation : https://www.pgadmin.org/docs/
- pgAdmin Docker : https://www.pgadmin.org/docs/pgadmin4/latest/container_deployment.html
- pgAdmin GitHub : https://github.com/pgadmin-org/pgadmin4
- pgAdmin 4 Tutorial (YouTube)
- PostgreSQL + pgAdmin Complete Guide (Udemy, Coursera)
- DBeaver (universel, gratuit) : https://dbeaver.io/
- DataGrip (JetBrains, payant) : https://www.jetbrains.com/datagrip/
- TablePlus (macOS/Windows, freemium) : https://tableplus.com/
- Adminer (PHP, ultra léger) : https://www.adminer.org/
Ce que vous avez appris :
✅ Déployer pgAdmin avec Docker Compose ✅ Connecter pgAdmin à PostgreSQL ✅ Naviguer dans l'interface graphique ✅ Créer bases de données et tables visuellement ✅ Exécuter des requêtes SQL avec l'éditeur intégré ✅ Gérer les utilisateurs et permissions ✅ Sauvegarder et restaurer des bases
🔝 Retour au Sommaire