Skip to content
VDS · Bases de données

PostgreSQL : installation et première base de données

Installer PostgreSQL sur VDS, les rôles et la première base, le fonctionnement de l'authentification dans pg_hba.conf et la résolution des erreurs de connexion.

Mis à jour le 23 août 2026

PostgreSQL est le choix par défaut pour les applications en Python, Node.js et Go. Il traite les données plus strictement que MySQL et gère mieux les requêtes complexes.

Installation

apt update && apt install -y postgresql postgresql-contrib   # Debian, Ubuntu
systemctl enable --now postgresql

Sur AlmaLinux et CentOS Stream, vous devez créer le cluster manuellement :

dnf install -y postgresql-server postgresql-contrib
postgresql-setup --initdb
systemctl enable --now postgresql

Vérifiez la version et l'état :

sudo -u postgres psql -c "SELECT version();"

Rôle et base de données

Dans PostgreSQL, un utilisateur s'appelle un rôle. Créez un rôle distinct pour chaque projet :

sudo -u postgres psql
CREATE ROLE shop WITH LOGIN PASSWORD 'long-random-password';
CREATE DATABASE shop OWNER shop ENCODING 'UTF8';
REVOKE ALL ON DATABASE shop FROM PUBLIC;

La chaîne de connexion pour l'application :

postgresql://shop:password@127.0.0.1:5432/shop

Vérifiez depuis l'utilisateur système :

psql "postgresql://shop:password@127.0.0.1:5432/shop" -c "\dt"

Authentification

Deux fichiers déterminent qui peut se connecter et depuis où.

/etc/postgresql/17/main/postgresql.conf :

listen_addresses = 'localhost'
port = 5432

/etc/postgresql/17/main/pg_hba.conf — les règles sont lues de haut en bas, et la première qui correspond l'emporte :

local   all   postgres            peer
local   all   all                 scram-sha-256
host    all   all   127.0.0.1/32  scram-sha-256

La méthode peer signifie « l'utilisateur système correspond au rôle » — c'est pourquoi sudo -u postgres psql fonctionne sans mot de passe, alors que la même commande depuis un autre utilisateur échoue.

Après modification : systemctl reload postgresql. N'utilisez jamais la méthode trust — elle laisse entrer n'importe qui sans aucun mot de passe.

Pour un accès depuis l'extérieur, consultez accès distant : vous ne devez pas ouvrir un port vers l'extérieur sans le restreindre par adresse.

Erreurs courantes

SymptômeCause
role "..." does not existVous vous connectez avec un utilisateur système qui n'a pas de rôle
password authentication failedLa règle dans pg_hba.conf exige une autre méthode, ou aucun mot de passe n'est défini
could not connect to server: No such file or directoryLe service n'est pas démarré, ou il utilise un autre port
permission denied for schema publicDans les versions 15+, vous devez accorder explicitement les droits sur public : GRANT ALL ON SCHEMA public TO shop;
FATAL: sorry, too many clientsmax_connections est épuisé — configurez un pool côté application

Journaux : /var/log/postgresql/ ou journalctl -u postgresql.

Étapes suivantes

Ne donnez pas un rôle superutilisateur à l'application. Un rôle propriétaire de base de données classique peut faire tout ce dont il a besoin, mais il ne peut pas supprimer les bases voisines si une migration se passe mal.