Aller au contenu
medium

Installer PostgreSQL sur Linux (Debian, Ubuntu, Rocky, RHEL)

18 min de lecture

Logo PostgreSQL

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.

  • 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, \conninfo et SELECT version()
  • Créer un premier rôle et une base d’administration dédiée

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

L’installation pose les fondations — la configuration fine et la sécurisation sont dans les guides dédiés :

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

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

  1. Installer le paquet de gestion des dépôts PGDG

    Le paquet postgresql-common fournit le script d’installation du dépôt et la clé GPG :

    Fenêtre de terminal
    sudo apt install -y postgresql-common ca-certificates
  2. 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 -y

    Il crée le fichier /etc/apt/sources.list.d/pgdg.list avec 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
  3. Installer PostgreSQL 18

    Fenêtre de terminal
    sudo apt update
    sudo apt install -y postgresql-18

    L’installation tire automatiquement les dépendances : postgresql-client-18, postgresql-common et postgresql-client-common.

  4. Vérifier que le cluster est créé et actif

    Sur Debian/Ubuntu, l’installation crée automatiquement un cluster nommé main et démarre le service :

    Fenêtre de terminal
    pg_lsclusters
    Ver Cluster Port Status Owner Data directory Log file
    18 main 5432 online postgres /var/lib/postgresql/18/main /var/log/postgresql/postgresql-18-main.log

Voici ce que l’installation PGDG pose sur le système (Debian) :

Fenêtre de terminal
dpkg -l 'postgresql*' | grep '^ii'
ii postgresql-18 18.3-1.pgdg12+1 amd64 The World's Most Advanced Open Source Relational Database
ii postgresql-18-jit 18.3-1.pgdg12+1 amd64 LLVM JIT support for PostgreSQL 18
ii postgresql-client-18 18.3-1.pgdg12+1 amd64 front-end programs for PostgreSQL 18
ii postgresql-client-common 290.pgdg12+1 all manager for multiple PostgreSQL client versions
ii postgresql-common 290.pgdg12+1 all PostgreSQL database-cluster manager
PaquetContenu
postgresql-18Le serveur PostgreSQL, initdb, les background workers
postgresql-client-18Les outils client : psql, pg_dump, pg_restore, pg_isready
postgresql-commonLe gestionnaire multi-cluster Debian : pg_lsclusters, pg_ctlcluster, scripts systemd
postgresql-18-jitCompilation JIT (LLVM) des requêtes — améliore les performances sur les requêtes complexes

L’emplacement du répertoire de données dépend de la distribution :

DistributionPGDATAConfiguration
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 :

Fenêtre de terminal
ls -la /etc/postgresql/18/main/
total 68
drwxr-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.conf

Fichiers clés : postgresql.conf, pg_hba.conf, pg_ident.conf

Section intitulée « Fichiers clés : postgresql.conf, pg_hba.conf, pg_ident.conf »
FichierRôlePermissions
postgresql.confConfiguration principale : mémoire, connexions, WAL, loggingLisible par tous
pg_hba.confRègles d’authentification : qui peut se connecter, depuis où, commentRestreint (640) — contient les méthodes d’auth
pg_ident.confMappage 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.confParamètres injectés par ALTER SYSTEMne pas éditer manuellementDans PGDATA

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/main

Les commandes courantes :

Fenêtre de terminal
# État du cluster
sudo systemctl status postgresql@18-main
# Arrêter / démarrer
sudo systemctl stop postgresql@18-main
sudo 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 boot
sudo systemctl enable postgresql@18-main

Voici 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) :

Fenêtre de terminal
sudo systemctl status postgresql-18
sudo systemctl reload postgresql-18

Avant même d’ouvrir psql, vous pouvez tester que le serveur accepte les connexions :

Fenêtre de terminal
pg_isready
/var/run/postgresql:5432 - accepting connections

Si la sortie indique no response ou rejecting connections, vérifiez que le service est bien démarré (voir la section Dépannage).

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 :

Fenêtre de terminal
sudo -u postgres psql

Vous 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 | on

Password Used: false confirme que l’authentification passe par le socket Unix (méthode peer), sans mot de passe.

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-bit

Vé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, setting
FROM pg_settings
WHERE 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ètreValeur par défautCe que ça signifie
listen_addresseslocalhostPostgreSQL n’écoute que localement — pas d’accès réseau distant
max_connections100Maximum 100 connexions simultanées
shared_buffers16384 (128 Mo)Cache mémoire partagé — à augmenter en production
data_checksumsonNouveauté PG 18 : checksums activés par défaut
password_encryptionscram-sha-256Les mots de passe sont hashés en SCRAM, pas en MD5
wal_levelreplicaNiveau WAL suffisant pour la streaming replication

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.

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
----------------
on

Vous pouvez aussi le confirmer avec pg_controldata :

Fenêtre de terminal
sudo -u postgres /usr/lib/postgresql/18/bin/pg_controldata /var/lib/postgresql/18/main | grep -i checksum
Data page checksum version: 1

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

Consultez les logs systemd selon votre distribution :

Fenêtre de terminal
# Debian / Ubuntu
sudo journalctl -u postgresql@18-main --no-pager -n 30
# RHEL / Rocky
sudo journalctl -u postgresql-18 --no-pager -n 30

Causes fréquentes :

SymptômeCause probableSolution
FATAL: could not open directory "pg_tblspc"Permissions incorrectes sur PGDATAchown -R postgres:postgres /var/lib/postgresql/18/main
FATAL: could not bind to address "0.0.0.0": Address already in useUn autre processus utilise le port 5432ss -tlnp | grep 5432 pour identifier le conflit
FATAL: data directory has wrong ownershipPGDATA n’appartient pas à postgresCorriger avec chown
Pas de sortie dans les logsLe cluster n’a pas été initialisé (RHEL)Exécuter postgresql-18-setup initdb

Si psql refuse la connexion :

  1. Vérifiez que le service tourne : sudo systemctl status postgresql@18-main
  2. Vérifiez le socket : ls /var/run/postgresql/.s.PGSQL.5432
  3. Vérifiez pg_hba.conf : la méthode d’authentification correspond-elle à votre mode de connexion ?
  4. Vérifiez listen_addresses : pour une connexion distante, PostgreSQL ne doit pas écouter uniquement sur localhost. Vérifiez aussi pg_hba.conf et le pare-feu

Le packaging Debian permet de faire tourner plusieurs versions simultanément. Chaque version a son propre port :

Fenêtre de terminal
pg_lsclusters

Si 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 :

Fenêtre de terminal
psql -p 5432 # le port de la version 18
psql -p 5433 # le port de la version 16 (si installée)
  • 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 initdb puis 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.conf est géré par ALTER SYSTEM — ne l’éditez jamais à la main.
  • reload suffit pour la plupart des changements de configuration. Seuls shared_buffers, max_connections et listen_addresses exigent un restart.
  • PostgreSQL 18 active les data checksums par défaut — ne les désactivez pas.
  • Créez un rôle dédié avec CREATEDB pour le travail quotidien — n’utilisez postgres que pour l’administration.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn