Errore PostgreSQL: role does not exist

FATAL:  role "ubuntu" does not exist

Il nome utente presentato dalla connessione non ha un ruolo corrispondente su questo cluster. Come il suo gemello (database does not exist), di solito è una sorpresa dovuta ai default: esegui psql senza -U e presenta il tuo username del sistema operativo, che su un'installazione nuova non corrisponde ad alcun ruolo.

Cosa significa questo errore

I ruoli (in PostgreSQL utenti e gruppi sono la stessa cosa) vivono a livello di cluster, condivisi da tutti i database su quel server. Un'installazione nuova ha essenzialmente un solo login role: postgres, il superuser. Niente che porti il nome del tuo account OS esiste finché qualcuno non lo crea.

Sui pacchetti Linux, le connessioni locali come utente OS postgres usano tipicamente l'autenticazione peer — l'identità OS è la credenziale. Ecco perché sudo -u postgres psql è il percorso di bootstrap standard.

Cause comuni

Come diagnosticarlo

# Entra come superuser locale (peer auth) e guarda i ruoli reali:
sudo -u postgres psql -c '\du'

Se non riesci a entrare in quel modo, chi amministra l'istanza può eseguire SELECT rolname FROM pg_roles;. Poi confronta con il nome esatto (e il case) nel messaggio di errore — e ricontrolla di essere sul cluster che intendevi.

Come risolverlo

-- Il ruolo applicativo tipico:
CREATE ROLE app_user LOGIN PASSWORD '...';

-- Oppure, per lavorare comodo in locale: un ruolo col tuo nome OS
CREATE ROLE gianluca LOGIN SUPERUSER;  -- solo su macchine di sviluppo
🔍 L'errore gemello: database does not exist — la stessa sorpresa dal lato del nome del database.