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

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
🔍 L'erreur jumelle : database does not exist — la même surprise côté nom de base.