Erreur PostgreSQL : role does not exist
FATAL: role "ubuntu" does not exist
Le nom d'utilisateur présenté par la connexion n'a pas de rôle correspondant sur ce cluster. Comme sa jumelle (database does not exist), c'est généralement une surprise de valeur par défaut : lancez psql sans -U et il présente votre nom d'utilisateur du système d'exploitation, qui sur une installation neuve ne correspond à aucun rôle.
Ce que signifie cette erreur
Les rôles (utilisateurs et groupes sont la même chose dans PostgreSQL) vivent au niveau cluster, partagés par toutes les bases de ce serveur. Une installation neuve a essentiellement un seul rôle de connexion : postgres, le superutilisateur. Rien portant le nom de votre compte OS n'existe tant que quelqu'un ne le crée pas.
Sur les paquets Linux, les connexions locales en tant qu'utilisateur OS postgres utilisent typiquement l'authentification peer — l'identité OS est l'identifiant. C'est pourquoi sudo -u postgres psql est le chemin d'amorçage standard.
Causes fréquentes
- psql sans
-Usur une machine dont le nom d'utilisateur OS n'a pas de rôle — le cas d'école sur les installations neuves et les images CI. - Le rôle n'a jamais été créé dans cet environnement (fonctionne en prod, échoue sur le nouveau portable).
- Mauvais cluster : le rôle existe sur l'instance managée, mais votre chaîne de connexion pointe vers localhost.
- Sensibilité à la casse : un rôle créé en tant que
"Alice"(entre guillemets) n'est pasalice.
Comment la diagnostiquer
# Entrez en tant que superutilisateur local (peer auth) et regardez les rôles réels :
sudo -u postgres psql -c '\du'
Si vous ne pouvez pas entrer ainsi, celui qui administre l'instance peut exécuter SELECT rolname FROM pg_roles;. Puis comparez au nom exact (et à la casse) dans le message d'erreur — et vérifiez à deux fois que vous êtes sur le cluster voulu.
Comment la corriger
-- Le rôle applicatif typique :
CREATE ROLE app_user LOGIN PASSWORD '...';
-- Ou bien, pour travailler confortablement en local : un rôle à votre nom OS
CREATE ROLE gianluca LOGIN SUPERUSER; -- uniquement sur des machines de développement
- Ou connectez-vous simplement avec un rôle existant :
psql -U postgres. - Dans les scripts et la CI, ne comptez jamais sur les valeurs par défaut : passez
-Uet-dexplicitement.
