Error de PostgreSQL: role does not exist

FATAL:  role "ubuntu" does not exist

El nombre de usuario que presentó la conexión no tiene un rol correspondiente en este clúster. Como su gemelo (database does not exist), esto suele ser una sorpresa de valores por defecto: ejecuta psql sin -U y presenta tu nombre de usuario del sistema operativo, que en una instalación nueva no coincide con ningún rol.

Qué significa este error

Los roles (usuarios y grupos son lo mismo en PostgreSQL) viven a nivel de clúster, compartidos por todas las bases de datos de ese servidor. Una instalación nueva tiene esencialmente un rol de login: postgres, el superusuario. Nada con el nombre de tu cuenta del SO existe hasta que alguien lo crea.

En los paquetes de Linux, las conexiones locales como el usuario del SO postgres normalmente usan autenticación peer — la identidad del SO es la credencial. Por eso sudo -u postgres psql es la ruta estándar de bootstrap.

Causas comunes

Cómo diagnosticarlo

# Entra como superusuario local (peer auth) y mira los roles reales:
sudo -u postgres psql -c '\du'

Si no puedes entrar de esa manera, quien administre la instancia puede ejecutar SELECT rolname FROM pg_roles;. Luego compara con el nombre exacto (y las mayúsculas/minúsculas) del mensaje de error — y comprueba dos veces que estás en el clúster que pretendías.

Cómo solucionarlo

-- El rol de aplicación típico:
CREATE ROLE app_user LOGIN PASSWORD '...';

-- O bien, para trabajar cómodo en local: un rol con tu nombre del SO
CREATE ROLE gianluca LOGIN SUPERUSER;  -- solo en máquinas de desarrollo
🔍 El error gemelo: database does not exist — la misma sorpresa en el lado del nombre de base de datos.