
Les distributions Linux embarquent souvent une version figée de PostgreSQL pendant tout leur cycle de vie. Si vous voulez une version majeure précise — comme PostgreSQL 18, avec les io workers, les checksums par défaut et les dernières corrections de sécurité — le dépôt officiel PGDG (PostgreSQL Global Development Group) est le chemin le plus simple.
Ce guide vous accompagne de A à Z : ajout du dépôt, installation des paquets, vérification du cluster créé automatiquement, et première connexion avec psql. En quelques minutes, vous aurez un cluster PostgreSQL opérationnel et vérifié avec psql.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Ajouter le dépôt PGDG et installer PostgreSQL 18 sur Debian/Ubuntu ou Rocky Linux/RHEL
- Comprendre ce que fait l’installation automatiquement : cluster, PGDATA, service systemd
- Identifier les fichiers de configuration et leur emplacement selon la distribution
- Vérifier que le cluster est fonctionnel avec
psql,\conninfoetSELECT version() - Créer un premier rôle et une base d’administration dédiée
Dans quel contexte ?
Section intitulée « Dans quel contexte ? »Ce guide est votre point d’entrée si vous êtes dans l’une de ces situations :
- Vous montez un serveur de développement ou de test et voulez la dernière version stable de PostgreSQL
- Vous devez standardiser la version de PostgreSQL sur plusieurs machines (Debian + RHEL dans le même parc)
- Vous préparez un lab pour suivre les guides configuration, sauvegarde ou réplication de cette section
- Vous passez d’un PostgreSQL installé par défaut (via
apt install postgresql) à une version spécifique gérée par PGDG - Vous déployez PostgreSQL pour la première fois et voulez comprendre ce que l’installation crée sur le système
Ce guide ne couvre pas…
Section intitulée « Ce guide ne couvre pas… »L’installation pose les fondations — la configuration fine et la sécurisation sont dans les guides dédiés :
Prérequis
Section intitulée « Prérequis »- Un serveur Debian 12, Ubuntu 22.04+, Rocky Linux 9 ou RHEL 9 avec accès root ou sudo
- Une connexion Internet (pour télécharger les paquets depuis les dépôts PGDG)
- Aucune version antérieure de PostgreSQL installée (ou une version gérée, si vous voulez faire cohabiter plusieurs versions)
Installer depuis les dépôts PGDG
Section intitulée « Installer depuis les dépôts PGDG »Le PostgreSQL Global Development Group (PGDG) maintient des dépôts officiels pour toutes les distributions majeures. Si vous avez besoin d’une version majeure précise et récente, comme PostgreSQL 18, c’est le chemin recommandé.
-
Installer le paquet de gestion des dépôts PGDG
Le paquet
postgresql-commonfournit le script d’installation du dépôt et la clé GPG :Fenêtre de terminal sudo apt install -y postgresql-common ca-certificates -
Exécuter le script d’ajout du dépôt
Ce script configure automatiquement le fichier sources et la clé de signature :
Fenêtre de terminal sudo /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh -yIl crée le fichier
/etc/apt/sources.list.d/pgdg.listavec la bonne URL et la clé GPG dans/usr/share/postgresql-common/pgdg/apt.postgresql.org.asc:deb [signed-by=/usr/share/postgresql-common/pgdg/apt.postgresql.org.asc] https://apt.postgresql.org/pub/repos/apt bookworm-pgdg main -
Installer PostgreSQL 18
Fenêtre de terminal sudo apt updatesudo apt install -y postgresql-18L’installation tire automatiquement les dépendances :
postgresql-client-18,postgresql-commonetpostgresql-client-common. -
Vérifier que le cluster est créé et actif
Sur Debian/Ubuntu, l’installation crée automatiquement un cluster nommé
mainet démarre le service :Fenêtre de terminal pg_lsclustersVer Cluster Port Status Owner Data directory Log file18 main 5432 online postgres /var/lib/postgresql/18/main /var/log/postgresql/postgresql-18-main.log
-
Installer le dépôt PGDG
L’exemple ci-dessous cible EL-9 / x86_64. Pour une autre version ou architecture (aarch64, ppc64le), consultez la page PGDG Red Hat pour générer la bonne commande :
Fenêtre de terminal sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm -
Désactiver le module PostgreSQL par défaut
RHEL 9 et Rocky Linux 9 embarquent un module AppStream qui peut entrer en conflit :
Fenêtre de terminal sudo dnf -qy module disable postgresql -
Installer PostgreSQL 18
Fenêtre de terminal sudo dnf install -y postgresql18-server postgresql18 -
Initialiser le cluster
Contrairement à Debian, l’installation sur RHEL ne crée pas automatiquement le cluster. Il faut lancer
initdbmanuellement :Fenêtre de terminal sudo /usr/pgsql-18/bin/postgresql-18-setup initdbCela crée le PGDATA dans
/var/lib/pgsql/18/data/. -
Démarrer et activer le service
Fenêtre de terminal sudo systemctl enable --now postgresql-18 -
Vérifier
Fenêtre de terminal sudo systemctl status postgresql-18
Le cluster après installation : quoi et où ?
Section intitulée « Le cluster après installation : quoi et où ? »Les paquets installés
Section intitulée « Les paquets installés »Voici ce que l’installation PGDG pose sur le système (Debian) :
dpkg -l 'postgresql*' | grep '^ii'ii postgresql-18 18.3-1.pgdg12+1 amd64 The World's Most Advanced Open Source Relational Databaseii postgresql-18-jit 18.3-1.pgdg12+1 amd64 LLVM JIT support for PostgreSQL 18ii postgresql-client-18 18.3-1.pgdg12+1 amd64 front-end programs for PostgreSQL 18ii postgresql-client-common 290.pgdg12+1 all manager for multiple PostgreSQL client versionsii postgresql-common 290.pgdg12+1 all PostgreSQL database-cluster manager| Paquet | Contenu |
|---|---|
postgresql-18 | Le serveur PostgreSQL, initdb, les background workers |
postgresql-client-18 | Les outils client : psql, pg_dump, pg_restore, pg_isready |
postgresql-common | Le gestionnaire multi-cluster Debian : pg_lsclusters, pg_ctlcluster, scripts systemd |
postgresql-18-jit | Compilation JIT (LLVM) des requêtes — améliore les performances sur les requêtes complexes |
PGDATA : où sont les données
Section intitulée « PGDATA : où sont les données »L’emplacement du répertoire de données dépend de la distribution :
| Distribution | PGDATA | Configuration |
|---|---|---|
| Debian / Ubuntu | /var/lib/postgresql/18/main | /etc/postgresql/18/main/ |
| RHEL / Rocky | /var/lib/pgsql/18/data | /var/lib/pgsql/18/data/ (dans PGDATA) |
Sur Debian, la séparation entre données et configuration est une spécificité du packaging. Les fichiers de configuration sont dans /etc/, pas dans PGDATA :
ls -la /etc/postgresql/18/main/total 68drwxr-xr-x 3 postgres postgres 4096 Apr 13 08:49 .drwxr-xr-x 3 postgres postgres 4096 Apr 13 08:49 ..drwxr-xr-x 2 postgres postgres 4096 Apr 13 08:49 conf.d-rw-r--r-- 1 postgres postgres 315 Apr 13 08:49 environment-rw-r--r-- 1 postgres postgres 143 Apr 13 08:49 pg_ctl.conf-rw-r----- 1 postgres postgres 5934 Apr 13 08:49 pg_hba.conf-rw-r----- 1 postgres postgres 2681 Apr 13 08:49 pg_ident.conf-rw-r--r-- 1 postgres postgres 32730 Apr 13 08:49 postgresql.conf-rw-r--r-- 1 postgres postgres 317 Apr 13 08:49 start.confFichiers clés : postgresql.conf, pg_hba.conf, pg_ident.conf
Section intitulée « Fichiers clés : postgresql.conf, pg_hba.conf, pg_ident.conf »| Fichier | Rôle | Permissions |
|---|---|---|
postgresql.conf | Configuration principale : mémoire, connexions, WAL, logging | Lisible par tous |
pg_hba.conf | Règles d’authentification : qui peut se connecter, depuis où, comment | Restreint (640) — contient les méthodes d’auth |
pg_ident.conf | Mappage entre utilisateurs système et rôles PostgreSQL (rarement modifié) | Restreint |
conf.d/ | Répertoire pour les fichiers de configuration additionnels (include_dir) | — |
postgresql.auto.conf | Paramètres injectés par ALTER SYSTEM — ne pas éditer manuellement | Dans PGDATA |
Le service systemd : start, stop, reload, status
Section intitulée « Le service systemd : start, stop, reload, status »Sur Debian/Ubuntu, le packaging utilise un template systemd qui permet de gérer plusieurs clusters sur la même machine :
postgresql.service ← service parent (démarre tous les clusters) └── postgresql@18-main ← instance du cluster 18/mainLes commandes courantes :
# État du clustersudo systemctl status postgresql@18-main
# Arrêter / démarrersudo systemctl stop postgresql@18-mainsudo systemctl start postgresql@18-main
# Recharger la configuration sans redémarrage (pg_hba.conf, postgresql.conf)sudo systemctl reload postgresql@18-main
# Activer le démarrage automatique au bootsudo systemctl enable postgresql@18-mainVoici la sortie réelle de systemctl status :
● postgresql@18-main.service - PostgreSQL Cluster 18-main Loaded: loaded (/lib/systemd/system/postgresql@.service; enabled-runtime; preset: enabled) Active: active (running) since Mon 2026-04-13 08:49:09 UTC; 42min ago Process: 4318 ExecStart=/usr/bin/pg_ctlcluster --skip-systemctl-redirect 18-main start (code=exited, status=0/SUCCESS) Main PID: 4323 (postgres) Tasks: 9 (limit: 2314) Memory: 27.1M CPU: 954ms CGroup: /system.slice/system-postgresql.slice/postgresql@18-main.service ├─4323 /usr/lib/postgresql/18/bin/postgres -D /var/lib/postgresql/18/main ... ├─4324 "postgres: 18/main: io worker 0" ├─4327 "postgres: 18/main: checkpointer" ├─4328 "postgres: 18/main: background writer" ├─4330 "postgres: 18/main: walwriter" ├─4331 "postgres: 18/main: autovacuum launcher" └─4332 "postgres: 18/main: logical replication launcher"Sur RHEL/Rocky, le service s’appelle postgresql-18 (pas de template multi-cluster par défaut) :
sudo systemctl status postgresql-18sudo systemctl reload postgresql-18Vérifier que le serveur répond : pg_isready
Section intitulée « Vérifier que le serveur répond : pg_isready »Avant même d’ouvrir psql, vous pouvez tester que le serveur accepte les connexions :
pg_isready/var/run/postgresql:5432 - accepting connectionsSi la sortie indique no response ou rejecting connections, vérifiez que le service est bien démarré (voir la section Dépannage).
Première connexion avec psql
Section intitulée « Première connexion avec psql »Se connecter en local
Section intitulée « Se connecter en local »L’installation crée un rôle PostgreSQL postgres qui correspond à l’utilisateur système postgres. La connexion locale passe par un socket Unix avec l’authentification peer — pas besoin de mot de passe :
sudo -u postgres psqlVous obtenez le prompt postgres=#. Vérifiez la connexion :
\conninfo Parameter | Value----------------------+--------------------- Database | postgres Client User | postgres Socket Directory | /var/run/postgresql Server Port | 5432 Protocol Version | 3.0 Password Used | false GSSAPI Authenticated | false SSL Connection | false Superuser | onPassword Used: false confirme que l’authentification passe par le socket Unix (méthode peer), sans mot de passe.
Vérifier la version
Section intitulée « Vérifier la version »SELECT version(); PostgreSQL 18.3 (Debian 18.3-1.pgdg12+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14+deb12u1) 12.2.0, 64-bitVérifier les paramètres clés après installation
Section intitulée « Vérifier les paramètres clés après installation »Quelques paramètres à vérifier immédiatement pour savoir dans quel état se trouve votre cluster :
SELECT name, settingFROM pg_settingsWHERE name IN ( 'listen_addresses', 'port', 'max_connections', 'shared_buffers', 'data_checksums', 'password_encryption', 'wal_level')ORDER BY name; name | setting---------------------+--------------- data_checksums | on listen_addresses | localhost max_connections | 100 password_encryption | scram-sha-256 port | 5432 shared_buffers | 16384 wal_level | replica| Paramètre | Valeur par défaut | Ce que ça signifie |
|---|---|---|
listen_addresses | localhost | PostgreSQL n’écoute que localement — pas d’accès réseau distant |
max_connections | 100 | Maximum 100 connexions simultanées |
shared_buffers | 16384 (128 Mo) | Cache mémoire partagé — à augmenter en production |
data_checksums | on | Nouveauté PG 18 : checksums activés par défaut |
password_encryption | scram-sha-256 | Les mots de passe sont hashés en SCRAM, pas en MD5 |
wal_level | replica | Niveau WAL suffisant pour la streaming replication |
Créer un rôle et une base d’administration
Section intitulée « Créer un rôle et une base d’administration »Ne travaillez pas au quotidien avec le superuser postgres. Créez un rôle dédié :
CREATE ROLE admin_lab LOGIN PASSWORD '<change-me>' CREATEDB;CREATE DATABASE lab_admin OWNER admin_lab;Vérifiez :
\du admin_lab List of roles Role name | Attributes-----------+------------ admin_lab | Create DB\l lab_admin Name | Owner | Encoding | Locale Provider | Collate | Ctype | Access privileges-----------+-----------+----------+-----------------+---------+---------+------------------- lab_admin | admin_lab | UTF8 | libc | C.UTF-8 | C.UTF-8 |Le rôle admin_lab peut créer des bases mais n’est pas superuser — il ne peut pas lire les données des autres bases ni modifier la configuration serveur. C’est le moindre privilège en action.
Version 18 : checksums activés par défaut
Section intitulée « Version 18 : checksums activés par défaut »Depuis PostgreSQL 18, les data checksums sont activés par défaut lors de l’initialisation du cluster. Sur les versions précédentes, il fallait activer explicitement les checksums à l’initialisation, ou les activer hors ligne plus tard avec pg_checksums.
Vérification :
SHOW data_checksums; data_checksums---------------- onVous pouvez aussi le confirmer avec pg_controldata :
sudo -u postgres /usr/lib/postgresql/18/bin/pg_controldata /var/lib/postgresql/18/main | grep -i checksumData page checksum version: 1Les checksums détectent les corruptions silencieuses de données sur le disque (bit flips, contrôleur RAID défaillant, firmware bugué). Sans checksums, PostgreSQL lit des données corrompues sans le savoir.
Dépannage
Section intitulée « Dépannage »Le service ne démarre pas
Section intitulée « Le service ne démarre pas »Consultez les logs systemd selon votre distribution :
# Debian / Ubuntusudo journalctl -u postgresql@18-main --no-pager -n 30
# RHEL / Rockysudo journalctl -u postgresql-18 --no-pager -n 30Causes fréquentes :
| Symptôme | Cause probable | Solution |
|---|---|---|
FATAL: could not open directory "pg_tblspc" | Permissions incorrectes sur PGDATA | chown -R postgres:postgres /var/lib/postgresql/18/main |
FATAL: could not bind to address "0.0.0.0": Address already in use | Un autre processus utilise le port 5432 | ss -tlnp | grep 5432 pour identifier le conflit |
FATAL: data directory has wrong ownership | PGDATA n’appartient pas à postgres | Corriger avec chown |
| Pas de sortie dans les logs | Le cluster n’a pas été initialisé (RHEL) | Exécuter postgresql-18-setup initdb |
psql: error: connection refused
Section intitulée « psql: error: connection refused »Si psql refuse la connexion :
- Vérifiez que le service tourne :
sudo systemctl status postgresql@18-main - Vérifiez le socket :
ls /var/run/postgresql/.s.PGSQL.5432 - Vérifiez pg_hba.conf : la méthode d’authentification correspond-elle à votre mode de connexion ?
- Vérifiez
listen_addresses: pour une connexion distante, PostgreSQL ne doit pas écouter uniquement surlocalhost. Vérifiez aussipg_hba.confet le pare-feu
Plusieurs versions cohabitent
Section intitulée « Plusieurs versions cohabitent »Le packaging Debian permet de faire tourner plusieurs versions simultanément. Chaque version a son propre port :
pg_lsclustersSi vous voyez deux lignes (par ex. 16 et 18), vérifiez que les ports sont différents. Pour cibler une version spécifique avec psql :
psql -p 5432 # le port de la version 18psql -p 5433 # le port de la version 16 (si installée)À retenir
Section intitulée « À retenir »- Utilisez les dépôts PGDG pour obtenir la dernière version stable — les dépôts de distribution sont en retard d’une à trois versions majeures.
- Sur Debian/Ubuntu, l’installation crée automatiquement le cluster et démarre le service. Sur RHEL/Rocky, il faut exécuter
initdbpuis activer le service manuellement. - La configuration est dans
/etc/postgresql/18/main/(Debian) ou dans PGDATA (RHEL). Ne confondez pas les deux. - Le fichier
postgresql.auto.confest géré parALTER SYSTEM— ne l’éditez jamais à la main. reloadsuffit pour la plupart des changements de configuration. Seulsshared_buffers,max_connectionsetlisten_addressesexigent unrestart.- PostgreSQL 18 active les data checksums par défaut — ne les désactivez pas.
- Créez un rôle dédié avec
CREATEDBpour le travail quotidien — n’utilisezpostgresque pour l’administration.