Skip to content

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.


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 :

Terminal window
# Installer la clé GPG
sudo apt install curl ca-certificates
curl 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 paquets
sudo apt update
Terminal window
# Installer PostgreSQL 16 (ou 15, 14 selon votre préférence)
sudo apt install postgresql-16 postgresql-client-16 postgresql-contrib-16

Le paquet postgresql-contrib installe des extensions supplémentaires utiles.

Terminal window
# Vérifier le statut du service
sudo systemctl status postgresql
# ou
service postgresql status
# Voir la version installée
psql --version

La gestion du service PostgreSQL se fait via systemd (ou service sur les systèmes plus anciens) :

Terminal window
# Démarrer PostgreSQL
sudo systemctl start postgresql
# Arrêter PostgreSQL
sudo systemctl stop postgresql
# Redémarrer PostgreSQL
sudo systemctl restart postgresql
# Recharger la configuration (sans arrêter le service)
sudo systemctl reload postgresql
# Activer le démarrage automatique
sudo systemctl enable postgresql

💡 Bon à savoir : La commande reload recharge postgresql.conf et pg_hba.conf sans interrompre les connexions actives. C’est très utile en production !


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 :

Terminal window
sudo pg_lsclusters

Structure 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.

PostgreSQL est un processus multi-thread et multi-processus (fork). Le processus principal postgres lance plusieurs processus fils spécialisés.

Terminal window
ps aux | grep postgres

Exemple 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.conf
postgres 1235 0.0 0.1 postgres: checkpointer
postgres 1236 0.0 0.1 postgres: background writer
postgres 1237 0.0 0.1 postgres: walwriter
postgres 1238 0.0 0.1 postgres: autovacuum launcher
postgres 1239 0.0 0.1 postgres: stats collector
postgres 1240 0.0 0.1 postgres: logical replication launcher
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).

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.

  • 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).
  • 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.
  • 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.

  • 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).


Pour visualiser les paramètres actuels :

-- Afficher tous les paramètres
SHOW ALL;
-- Afficher un paramètre spécifique
SHOW shared_buffers;
SHOW work_mem;
SHOW max_connections;
-- via psql
SELECT name, setting, unit FROM pg_settings WHERE name LIKE '%mem%';

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

Terminal window
pg_createcluster 16 mycluster --port 5433
pg_ctlcluster 16 mycluster start

Pour vérifier que tout fonctionne :

Terminal window
# Se connecter avec l'utilisateur postgres
sudo -u postgres psql
# Dans psql, afficher la version
SELECT version();
# Liste des bases de données
\l
# Créer une base de test
CREATE DATABASE test;
# Se connecter
\c test
# Créer une table
CREATE TABLE test (id SERIAL PRIMARY KEY, nom VARCHAR(50));
# Insérer des données
INSERT INTO test (nom) VALUES ('Test 1'), ('Test 2');
# Interroger
SELECT * FROM test;
# Quitter
\q

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