Error de PostgreSQL: database does not exist
FATAL: database "gianluca" does not exist
Te conectaste al clúster con éxito, pero pediste una base de datos que no está ahí. Cuando la "base de datos faltante" del mensaje es tu propio nombre de usuario, nada está roto: psql simplemente usa por defecto el nombre de usuario como nombre de base de datos cuando no especificas uno.
Qué significa este error
Un servidor PostgreSQL (clúster) aloja varias bases de datos; cada conexión apunta exactamente a una. Si el nombre solicitado no existe en el clúster que realmente alcanzaste, obtienes este FATAL. Ambas mitades de esa frase causan confusión:
- El nombre solicitado puede no ser el que crees — psql y muchas herramientas lo ponen por defecto (al nombre de usuario), y variables de entorno como
PGDATABASElo anulan sin avisar. - El clúster que realmente alcanzaste puede no ser el que tiene tus datos: puerto 5432 vs 5433, la máquina host vs el contenedor de Docker, local vs remoto.
Causas comunes
- psql sin
-d: el nombre de base de datos toma por defecto el nombre de usuario — el clásicodatabase "gianluca" does not exist. - La base de datos aún no se ha creado en este entorno (instalación nueva, nuevo trabajo de CI, contenedor recreado sin sus scripts de init).
- Clúster incorrecto: la cadena de conexión apunta a otro puerto/host donde esa base de datos genuinamente no existe.
- Mayúsculas/minúsculas o error tipográfico: los nombres de base de datos son identificadores — creado entrecomillado como
"AppDb", hay que solicitarlo con esa combinación exacta de mayúsculas/minúsculas.
Cómo diagnosticarlo
# Qué hay realmente en este clúster:
psql -h HOST -p 5432 -U USER -d postgres -c '\l'
Conectarse a la siempre presente base de datos de mantenimiento postgres y listar lo que existe responde ambas preguntas de una vez: si estás en el clúster correcto, y cómo se llama realmente la base de datos.
Cómo solucionarlo
- Nombra la base de datos explícitamente:
psql -d appdb, o arregla la cadena de conexión /PGDATABASE. - Créala si genuinamente falta:
CREATE DATABASE appdb OWNER app_user; - Clúster incorrecto → arregla host/puerto; en sistemas de la familia Debian
pg_lsclusterslista los clústeres locales y sus puertos.
🔍
El error gemelo: role does not exist — el mismo mecanismo de valor por defecto, en el lado del nombre de usuario.
