PostgreSQL-Fehler: role does not exist

FATAL:  role "ubuntu" does not exist

Der Benutzername, den die Verbindung vorgelegt hat, hat auf diesem Cluster keine passende Rolle. Wie sein Zwilling (database does not exist) ist dies meist eine Rückfall-Überraschung: führen Sie psql ohne -U aus, und es legt Ihren Betriebssystem-Benutzernamen vor, der auf einer frischen Installation keiner Rolle entspricht.

Was dieser Fehler bedeutet

Rollen (Benutzer und Gruppen sind in PostgreSQL dasselbe) leben auf Cluster-Ebene, geteilt von allen Datenbanken auf diesem Server. Eine frische Installation hat im Wesentlichen eine Login-Rolle: postgres, den Superuser. Nichts, das nach Ihrem OS-Konto benannt ist, existiert, bis es jemand erstellt.

Auf Linux-Paketen verwenden lokale Verbindungen als OS-Benutzer postgres typischerweise peer-Authentifizierung — die OS-Identität ist das Zugangsmittel. Deshalb ist sudo -u postgres psql der Standard-Bootstrap-Weg.

Häufige Ursachen

So diagnostizieren Sie ihn

# Als lokaler Superuser einloggen (Peer-Auth) und die echten Rollen ansehen:
sudo -u postgres psql -c '\du'

Wenn Sie auf diese Weise nicht hineinkommen, kann derjenige, der die Instanz administriert, SELECT rolname FROM pg_roles; ausführen. Vergleichen Sie dann mit dem genauen Namen (und der Schreibweise) in der Fehlermeldung — und prüfen Sie doppelt, dass Sie auf dem gemeinten Cluster sind.

So beheben Sie ihn

-- Die typische Anwendungsrolle:
CREATE ROLE app_user LOGIN PASSWORD '...';

-- Oder, um lokal bequem zu arbeiten: eine Rolle mit Ihrem OS-Namen
CREATE ROLE gianluca LOGIN SUPERUSER;  -- nur auf Entwicklungsmaschinen
🔍 Der Zwillingsfehler: database does not exist — dieselbe Überraschung auf der Seite des Datenbanknamens.