Installation et architecture de PostgreSQL
Bonne lecture et bon apprentissage !
Junior TSAFACK – 20/08/2026
⏱️ Temps de lecture estimé : 9 minutes
Après avoir découvert l’histoire et les concepts fondamentaux de PostgreSQL, il est temps de passer à la pratique. Ce cours vous guide pas à pas dans l’installation de PostgreSQL sur Debian, l’exploration de son architecture, de ses processus et de sa gestion mémoire.
Installation sur Debian / Ubuntu
Section titled “Installation sur Debian / Ubuntu”L’installation de PostgreSQL est simple grâce au gestionnaire de paquets apt. Voici les étapes pour Debian 11/12 (ou Ubuntu 20.04/22.04) :
1. Ajouter le dépôt officiel (version récente)
Section titled “1. Ajouter le dépôt officiel (version récente)”Pour Debian, le paquet postgresql est disponible dans les dépôts officiels. Mais pour une version plus récente que celle proposée par défaut, ajoutez le dépôt PostgreSQL officiel :
# Installer la clé GPGsudo apt install curl ca-certificatescurl https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
# Ajouter le dépôt (exemple pour Debian 12)sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
# Mettre à jour la liste des paquetssudo apt update2. Installer PostgreSQL
Section titled “2. Installer PostgreSQL”# Installer PostgreSQL 16 (ou 15, 14 selon votre préférence)sudo apt install postgresql-16 postgresql-client-16 postgresql-contrib-16Le paquet postgresql-contrib installe des extensions supplémentaires utiles.
3. Vérifier l’installation
Section titled “3. Vérifier l’installation”# Vérifier le statut du servicesudo systemctl status postgresql# ouservice postgresql status
# Voir la version installéepsql --versionGestion du service
Section titled “Gestion du service”La gestion du service PostgreSQL se fait via systemd (ou service sur les systèmes plus anciens) :
# Démarrer PostgreSQLsudo systemctl start postgresql
# Arrêter PostgreSQLsudo systemctl stop postgresql
# Redémarrer PostgreSQLsudo systemctl restart postgresql
# Recharger la configuration (sans arrêter le service)sudo systemctl reload postgresql
# Activer le démarrage automatiquesudo systemctl enable postgresql💡 Bon à savoir : La commande
reloadrechargepostgresql.confetpg_hba.confsans interrompre les connexions actives. C’est très utile en production !
Principaux répertoires
Section titled “Principaux répertoires”PostgreSQL utilise deux répertoires principaux sur Debian/Ubuntu :
| Répertoire | Rôle |
|---|---|
/etc/postgresql/<version>/<cluster>/ |
Fichiers de configuration (ex : postgresql.conf, pg_hba.conf) |
/var/lib/postgresql/<version>/<cluster>/ |
Données des bases (fichiers de tables, WAL, etc.) |
/usr/lib/postgresql/<version>/bin/ |
Binaires du serveur (ex : postgres) |
/usr/bin/ |
Binaires des outils (ex : psql, pg_dump, pg_ctl) |
Exemple avec PostgreSQL 16 et le cluster par défaut main :
- Configuration :
/etc/postgresql/16/main/ - Données :
/var/lib/postgresql/16/main/ - Binaire principal :
/usr/lib/postgresql/16/bin/postgres
Pour afficher le chemin complet du cluster :
sudo pg_lsclustersStructure de l’arborescence des données
Section titled “Structure de l’arborescence des données”Dans /var/lib/postgresql/16/main/, vous trouverez ces dossiers clés :
| Dossier | Contenu |
|---|---|
base/ |
Contient les bases de données (chaque base a un sous-dossier avec son OID). |
global/ |
Fichiers système (ex : pg_control, pg_database, pg_authid). |
pg_wal/ |
Journaux de transactions (Write-Ahead Log). |
pg_log/ |
Logs du serveur (selon configuration). |
pg_stat/ |
Fichiers de statistiques (optimiseur de requêtes). |
pg_tblspc/ |
Liens symboliques vers les tablespaces externes. |
Processus de PostgreSQL
Section titled “Processus de PostgreSQL”PostgreSQL est un processus multi-thread et multi-processus (fork). Le processus principal postgres lance plusieurs processus fils spécialisés.
Vue des processus
Section titled “Vue des processus”ps aux | grep postgresExemple de sortie (avec PostgreSQL 16) :
postgres 1234 0.0 0.5 /usr/lib/postgresql/16/bin/postgres -D /var/lib/postgresql/16/main -c config_file=/etc/postgresql/16/main/postgresql.confpostgres 1235 0.0 0.1 postgres: checkpointerpostgres 1236 0.0 0.1 postgres: background writerpostgres 1237 0.0 0.1 postgres: walwriterpostgres 1238 0.0 0.1 postgres: autovacuum launcherpostgres 1239 0.0 0.1 postgres: stats collectorpostgres 1240 0.0 0.1 postgres: logical replication launcherRôles des processus
Section titled “Rôles des processus”| Processus | Rôle |
|---|---|
| postgres (père) | Processus racine qui gère les connexions et fork les nouveaux processus. |
| checkpointer | Écrit les pages mémoire modifiées (dirty pages) sur le disque à intervalles réguliers (checkpoints). Réduit le temps de recovery en cas de crash. |
| background writer | Écrit les dirty pages en continu pour lisser la charge et éviter que le checkpointer ne fasse tout d’un coup. |
| walwriter | Écrit les buffers WAL (journaux de transactions) sur le disque. Garantit la durabilité des transactions. |
| autovacuum launcher | Lance automatiquement le VACUUM pour nettoyer les lignes mortes et mettre à jour les statistiques. |
| stats collector | Collecte les statistiques d’utilisation (nombre de scans, d’insertions, etc.) pour l’optimiseur de requêtes. |
| logical replication launcher | Gère la réplication logique (abonnements). |
Gestion de la mémoire
Section titled “Gestion de la mémoire”La performance de PostgreSQL dépend largement de l’allocation mémoire. Le moteur répartit la mémoire en quatre zones principales, configurables dans postgresql.conf.
1. Shared Buffers
Section titled “1. Shared Buffers”- Rôle : Zone mémoire partagée contenant les pages de données les plus fréquemment utilisées.
- Valeur par défaut :
128 MB. - Recommandation : 25 % à 40 % de la RAM totale du serveur.
- Paramètre :
shared_buffers = 4GB(exemple pour 16 Go de RAM).
2. WAL Buffers
Section titled “2. WAL Buffers”- Rôle : Stocke temporairement les journaux de transactions avant leur écriture dans
pg_wal/. - Valeur par défaut :
16 MB. - Paramètre :
wal_buffers = 16MB.
3. Work Mem
Section titled “3. Work Mem”- Rôle : Mémoire allouée par connexion et par opération de tri, jointure, filtrage.
- Valeur par défaut :
4 MB. - Recommandation : Augmenter si vos requêtes utilisent beaucoup de tris (ex :
ORDER BY,DISTINCT). - Paramètre :
work_mem = 64MB.
Attention : Si 100 connexions sont actives, chacune peut utiliser jusqu’à 64 Mo => 6,4 Go potentiels.
4. Maintenance Work Mem
Section titled “4. Maintenance Work Mem”- Rôle : Mémoire allouée pour les opérations de maintenance (VACUUM, CREATE INDEX, REINDEX).
- Valeur par défaut :
64 MB. - Recommandation : Augmenter pour accélérer les indexations lourdes.
- Paramètre :
maintenance_work_mem = 1GB.
💡 Astuce : Utilisez l’outil pgtune pour obtenir des recommandations personnalisées selon votre matériel (RAM, CPU, type d’application).
Vérifier les paramètres en cours
Section titled “Vérifier les paramètres en cours”Pour visualiser les paramètres actuels :
-- Afficher tous les paramètresSHOW ALL;
-- Afficher un paramètre spécifiqueSHOW shared_buffers;SHOW work_mem;SHOW max_connections;
-- via psqlSELECT name, setting, unit FROM pg_settings WHERE name LIKE '%mem%';Commandes spécifiques Debian
Section titled “Commandes spécifiques Debian”Sur Debian/Ubuntu, des wrappers facilitent la gestion des clusters PostgreSQL :
| Commande | Rôle |
|---|---|
pg_createcluster <version> <cluster> |
Crée un nouveau cluster (ex : pg_createcluster 16 moncluster). |
pg_dropcluster <version> <cluster> |
Supprime un cluster (arrêté). |
pg_lsclusters |
Liste tous les clusters avec leur état (port, version, statut). |
pg_ctlcluster <version> <cluster> <action> |
Contrôle un cluster (start/stop/reload/restart). |
Exemple : Créer un nouveau cluster sur le port 5433
pg_createcluster 16 mycluster --port 5433pg_ctlcluster 16 mycluster startTest de l’installation
Section titled “Test de l’installation”Pour vérifier que tout fonctionne :
# Se connecter avec l'utilisateur postgressudo -u postgres psql
# Dans psql, afficher la versionSELECT version();
# Liste des bases de données\l
# Créer une base de testCREATE DATABASE test;
# Se connecter\c test
# Créer une tableCREATE TABLE test (id SERIAL PRIMARY KEY, nom VARCHAR(50));
# Insérer des donnéesINSERT INTO test (nom) VALUES ('Test 1'), ('Test 2');
# InterrogerSELECT * FROM test;
# Quitter\qProchain chapitre
Section titled “Prochain chapitre”Votre PostgreSQL est installé et vous comprenez son architecture. Dans le prochain cours, vous apprendrez à utiliser psql, le client en ligne de commande, pour interagir avec vos bases de données.
👉 Cours 3 : PSQL – Les commandes de base
Junior TSAFACK – 20/08/2026