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ôme | Cause |
|---|---|
role "..." does not exist | Vous vous connectez avec un utilisateur système qui n'a pas de rôle |
password authentication failed | La 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 directory | Le service n'est pas démarré, ou il utilise un autre port |
permission denied for schema public | Dans les versions 15+, vous devez accorder explicitement les droits sur public : GRANT ALL ON SCHEMA public TO shop; |
FATAL: sorry, too many clients | max_connections est épuisé — configurez un pool côté application |
Journaux : /var/log/postgresql/ ou journalctl -u postgresql.
Étapes suivantes
- Réglage de la mémoire selon le tier — sur VDS-1, les valeurs par défaut sont nettement trop basses.
- Sauvegardes —
pg_dumpet restauration. - Migration d'une base de données depuis un autre serveur.
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.