Errore PostgreSQL: database does not exist
FATAL: database "gianluca" does not exist
Ti sei connesso al cluster con successo, ma hai chiesto un database che non c'è. Quando il "database mancante" nel messaggio è il tuo stesso username, non c'è nulla di rotto: psql usa semplicemente come default il nome del database uguale al nome dell'utente quando non ne specifichi uno.
Cosa significa questo errore
Un server (cluster) PostgreSQL ospita più database; ogni connessione ne punta esattamente uno. Se il nome richiesto non esiste sul cluster che hai effettivamente raggiunto, ottieni questo FATAL. Entrambe le metà di quella frase causano confusione:
- Il nome richiesto potrebbe non essere quello che pensi — psql e molti strumenti lo impostano di default (al nome utente), e variabili d'ambiente come
PGDATABASElo sovrascrivono in silenzio. - Il cluster che hai effettivamente raggiunto potrebbe non essere quello con i tuoi dati: porta 5432 vs 5433, macchina host vs container Docker, locale vs remoto.
Cause comuni
- psql senza
-d: il nome del database viene impostato di default al nome utente — il classicodatabase "gianluca" does not exist. - Il database non è ancora stato creato in questo ambiente (setup nuovo, nuovo job CI, container ricreato senza i suoi script di init).
- Cluster sbagliato: la stringa di connessione punta a un'altra porta/host dove quel database davvero non esiste.
- Case o refuso: i nomi dei database sono identificatori — creato quotato come
"AppDb", deve essere richiesto con quel case esatto.
Come diagnosticarlo
# Cosa c'è davvero su questo cluster:
psql -h HOST -p 5432 -U USER -d postgres -c '\l'
Connettersi al database di manutenzione postgres, sempre presente, ed elencare cosa esiste risponde a entrambe le domande in una volta: se sei sul cluster giusto, e come si chiama davvero il database.
Come risolverlo
- Nomina il database esplicitamente:
psql -d appdb, o correggi la stringa di connessione /PGDATABASE. - Crealo se manca davvero:
CREATE DATABASE appdb OWNER app_user; - Cluster sbagliato → correggi host/porta; sui sistemi della famiglia Debian
pg_lsclusterselenca i cluster locali e le loro porte.
🔍
L'errore gemello: role does not exist — stesso meccanismo di default, dal lato del nome utente.
