🔝 Retour au Sommaire
- Vue d'ensemble
- Pourquoi PostgreSQL ?
- Versions disponibles
- Guides disponibles
- Architecture recommandée
- Prérequis
- Points clés à connaître
- Cas d'usage typiques
- Ressources complémentaires
PostgreSQL (souvent appelé "Postgres") est un système de gestion de base de données relationnelle objet (SGBDRO) open source, réputé pour sa robustesse, sa conformité aux standards SQL et ses fonctionnalités avancées.
| Caractéristique | Description |
|---|---|
| 🔓 Open Source | Licence PostgreSQL (très permissive) |
| 📊 Type | Base de données relationnelle SQL |
| 🧩 Extensibilité | Support des extensions (PostGIS, pg_trgm...) |
| 🔒 ACID | Transactions complètement ACID |
| 🌐 JSON | Support natif JSON et JSONB (NoSQL-like) |
| 🔍 Recherche | Full-text search intégré |
| 🎯 Standards | Forte conformité SQL (SQL:2016) |
| 📈 Performance | Optimisé pour les charges complexes |
✅ Fiabilité légendaire
- Stabilité éprouvée depuis 30+ ans
- Intégrité des données garantie (ACID)
- Réplication et haute disponibilité natives
✅ Fonctionnalités avancées
- Types de données riches (tableaux, JSON, XML, géométrie...)
- Requêtes complexes optimisées (CTE, window functions, LATERAL...)
- Procédures stockées (PL/pgSQL, Python, Perl...)
- Triggers et contraintes sophistiqués
✅ Extensibilité
- Création de types de données personnalisés
- Extensions puissantes (PostGIS pour géolocalisation, TimescaleDB pour séries temporelles...)
- Support de multiples langages procéduraux
✅ Écosystème riche
- Outils d'administration (pgAdmin, DBeaver, DataGrip)
- Excellent support communautaire
- Documentation de qualité
| ✅ Utilisez PostgreSQL si... | ❌ Évitez PostgreSQL si... |
|---|---|
| Applications web complexes | Besoin de simplicité extrême (→ SQLite) |
| Intégrité des données critique | Besoin de schéma ultra-flexible (→ MongoDB) |
| Requêtes analytiques avancées | Cache haute performance (→ Redis) |
| Support JSON/NoSQL hybride | Dépendance forte aux features T-SQL spécifiques |
| Géolocalisation (+ PostGIS) | Très petits projets embarqués |
| Conformité SQL stricte requise | Infrastructure Azure 100% Microsoft requise |
| Compatible .NET (EF Core, Npgsql) | Équipe uniquement formée à MS SQL Server |
L'image officielle PostgreSQL est disponible sur Docker Hub.
| Version | Tag Docker | Statut | Recommandation |
|---|---|---|---|
| 16.x | postgres:16 |
Stable actuel | ✅ Production 2024+ |
| 15.x | postgres:15 |
Stable LTS | ✅ Production |
| 14.x | postgres:14 |
Maintenance | |
| 13.x | postgres:13 |
Maintenance | |
| Alpine | postgres:16-alpine |
Léger | 🪶 Image réduite |
| Latest | postgres:latest |
Dernière stable | 🎯 Développement |
💡 Recommandation : Utilisez postgres:15 ou postgres:16 pour la production, postgres:latest pour le développement.
PostgreSQL 16 (2023)
- Amélioration des performances (parallélisation)
- Réplication logique améliorée
- Optimisations des requêtes
PostgreSQL 15 (2022)
- Compression TOAST améliorée
- Support SQL/JSON étendu
- Performance des tris optimisée
Ce dossier contient 5 guides couvrant tous les aspects de PostgreSQL avec Docker :
| Guide | Niveau | Temps | Description |
|---|---|---|---|
| 2.1 Config basique | 🟢 Débutant | 5 min | Installation rapide |
| 2.2 Config avancée | 🟡 Intermédiaire | 15 min | Fichier postgresql.conf |
| 2.3 IP fixe | 🟡 Intermédiaire | 10 min | Réseau Docker personnalisé |
| 2.4 Gestion utilisateurs | 🟡 Intermédiaire | 20 min | Roles, permissions, bases |
| 2.5 Avec pgAdmin | 🟢 Débutant | 10 min | Interface graphique |
🎓 Débutant complet
Guide 2.1 (Config basique) → Guide 2.5 (pgAdmin)
👨💻 Développeur
Guide 2.1 → Guide 2.4 (Utilisateurs) → Guide 2.2 (Config avancée)
🔧 Administrateur
Guide 2.2 (Config avancée) → Guide 2.3 (IP fixe) → Guide 2.4 (Utilisateurs)
┌─────────────────────────────────────────┐
│ Votre Machine (Hôte) │
│ │
│ ┌───────────────────────────────────┐ │
│ │ Docker Container: postgres_dev │ │
│ │ │ │
│ │ PostgreSQL 15 │ │
│ │ Port: 5432 → 5432 │ │
│ │ Volume: ./data → /var/lib/... │ │
│ │ Réseau: bridge (défaut) │ │
│ └───────────────────────────────────┘ │
│ ↕ │
│ ┌───────────────────────────────────┐ │
│ │ Client SQL (pgAdmin, DBeaver) │ │
│ │ localhost:5432 │ │
│ └───────────────────────────────────┘ │
└─────────────────────────────────────────┘
┌──────────────────────────────────────────────┐
│ Réseau Docker: postgres_net │
│ (172.20.0.0/16) │
│ │
│ ┌────────────────────┐ ┌────────────────┐ │
│ │ postgres_db │ │ app_backend │ │
│ │ 172.20.0.10:5432│←─│ 172.20.0.20 │ │
│ └────────────────────┘ └────────────────┘ │
│ ↕ │
│ ┌────────────────────┐ │
│ │ pgadmin │ │
│ │ 172.20.0.30 │ │
│ └────────────────────┘ │
└──────────────────────────────────────────────┘
↕
Hôte (5432, 8080)
- ✅ Docker 20.10+ installé
- ✅ Docker Compose 2.0+ installé
- ✅ 4 Go RAM minimum disponible
- ✅ 10 Go d'espace disque minimum
# Vérifier Docker
docker --version
# Attendu: Docker version 20.10.x ou supérieur
# Vérifier Docker Compose
docker-compose --version
# Attendu: Docker Compose version 2.x.x ou supérieur
# Tester Docker
docker run hello-world
# Doit afficher: "Hello from Docker!"| Niveau | Connaissances |
|---|---|
| 🟢 Débutant | Commandes terminal de base |
| 🟡 Intermédiaire | Bases SQL (SELECT, INSERT, UPDATE) |
| 🔴 Avancé | Administration PostgreSQL, réseaux Docker |
| Service | Port | Usage |
|---|---|---|
| PostgreSQL | 5432 |
Connexions client |
| pgAdmin | 80 ou 8080 |
Interface web |
PostgreSQL utilise un système de roles (utilisateurs et groupes) :
postgres: Super-utilisateur par défaut (équivalentroot)- Authentification : Par mot de passe (md5, scram-sha-256)
- Fichier
pg_hba.conf: Contrôle les méthodes d'authentification
Par défaut, PostgreSQL crée 3 bases :
| Base | Usage |
|---|---|
postgres |
Base par défaut, administration |
template0 |
Template de référence (non modifiable) |
template1 |
Template personnalisable pour nouvelles bases |
volumes:
- postgres_data:/var/lib/postgresql/dataChemin important : /var/lib/postgresql/data
- Contient TOUTES les données
- Critique : À sauvegarder régulièrement
| Variable | Description | Exemple |
|---|---|---|
POSTGRES_PASSWORD |
Mot de passe root (OBLIGATOIRE) | mon_mdp_secure |
POSTGRES_USER |
Nom utilisateur (défaut: postgres) |
admin |
POSTGRES_DB |
Nom de la base initiale | myapp |
POSTGRES_INITDB_ARGS |
Args d'initialisation | --encoding=UTF8 |
Caractéristiques :
- Base principale de l'application
- Schéma relationnel complexe
- Intégrité référentielle importante
Configuration : Guide 2.1 (basique) + Guide 2.4 (utilisateurs)
Caractéristiques :
- Requêtes complexes (JOINs, agrégations)
- Grandes volumétries
- Window functions et CTE
Configuration : Guide 2.2 (config avancée pour performance)
Caractéristiques :
- Extension PostGIS
- Requêtes spatiales
- Données cartographiques
Configuration : Guide 2.2 (avec installation PostGIS)
Caractéristiques :
- Backend moderne (NestJS, FastAPI...)
- ORM (Prisma, TypeORM, SQLAlchemy)
- Migrations automatisées
Configuration : Guide 2.3 (IP fixe) + Guide 2.4
Caractéristiques :
- Plusieurs services → plusieurs bases
- Isolation des données
- Réseau Docker dédié
Configuration : Guide 2.3 (IP fixe avec réseau personnalisé)
| Critère | PostgreSQL | MySQL/MariaDB | MS SQL | MongoDB |
|---|---|---|---|---|
| Conformité SQL | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐ (NoSQL) |
| Performance lecture | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
| Performance écriture | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| Fonctionnalités | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
| Facilité | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ |
| JSON/NoSQL | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| Extensions | ⭐⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ |
| Communauté | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
🎯 PostgreSQL excelle pour :
- Applications nécessitant SQL avancé
- Intégrité des données critique
- Données hybrides (SQL + JSON)
- Requêtes analytiques complexes
| Outil | Type | Usage |
|---|---|---|
| pgAdmin | GUI | Administration complète |
| DBeaver | GUI | Client universel |
| DataGrip | GUI | IDE JetBrains (payant) |
| psql | CLI | Client en ligne de commande |
| pg_dump | CLI | Sauvegarde |
| pgBadger | CLI | Analyse de logs |
# Se connecter au conteneur
docker exec -it postgres_dev bash
# Client psql
docker exec -it postgres_dev psql -U postgres
# Voir les bases
docker exec -it postgres_dev psql -U postgres -c "\l"
# Backup
docker exec postgres_dev pg_dump -U postgres mydb > backup.sql
# Restore
docker exec -i postgres_dev psql -U postgres mydb < backup.sqlPrêt à commencer ? Suivez le guide selon votre besoin :
-
Premier contact avec PostgreSQL ? → Guide 2.1 - Configuration basique
-
Besoin d'une interface graphique ? → Guide 2.5 - PostgreSQL avec pgAdmin
-
Projet avec plusieurs conteneurs ? → Guide 2.3 - Configuration IP fixe
-
Configuration pour la production ? → Guide 2.2 - Configuration avancée
🔒 Les configurations de ce guide sont pour le DÉVELOPPEMENT uniquement
Pour la production :
- Changez TOUS les mots de passe par défaut
- Utilisez des certificats SSL/TLS
- Configurez
pg_hba.confde manière restrictive - Activez les audits de connexion
- Mettez en place des sauvegardes automatiques
💡 Ajustements recommandés pour le développement :
shared_buffers: 25% de la RAM disponiblework_mem: 10-50 MBmaintenance_work_mem: 256 MB
→ Détails dans le Guide 2.2
✅ Testé avec :
- Docker Desktop (Windows, macOS)
- Docker Engine (Linux)
- Docker Compose v2
🐘 Prêt à explorer PostgreSQL avec Docker !
🔝 Retour au Sommaire