psql: FATAL: la base de datos "<usuario>" no existe


723

Estoy usando la aplicación PostgreSql para mac ( http://postgresapp.com/ ). Lo he usado en el pasado en otras máquinas, pero me está dando algunos problemas al instalarlo en mi macbook. Instalé la aplicación y ejecuté:

psql -h localhost

Vuelve:

psql: FATAL:  database "<user>" does not exist

Parece que ni siquiera puedo ejecutar la consola para crear la base de datos que intenta encontrar. Lo mismo sucede cuando acabo de correr:

psql 

o si ejecuto psql desde el menú desplegable de la aplicación:

Estadísticas de la máquina:

  • OSX 10.8.4

  • psql (PostgreSQL) 9.2.4

Cualquier ayuda es apreciada.

También intenté instalar PostgreSql a través de homebrew y obtengo el mismo problema. También he leído la página de documentación de aplicaciones que dice:

Cuando Postgres.app se inicia por primera vez, crea la base de datos $ USER, que es la base de datos predeterminada para psql cuando no se especifica ninguno. El usuario predeterminado es $ USER, sin contraseña.

Entonces parece que la aplicación no está creando $ USER, sin embargo, he instalado-> desinstalado-reinstalado varias veces ahora, por lo que debe ser algo con mi máquina.

Encontré la respuesta, pero no estoy seguro de cómo funciona exactamente, ya que el usuario que respondió en este hilo -> Hacer que Postgresql se ejecute en Mac: la base de datos "postgres" no existe . Usé el siguiente comando para abrir psql:

psql -d template1

Dejaré este sin respuesta hasta que alguien pueda proporcionar una explicación de por qué esto funciona.


3
¿Qué psql -d postgres -U postgres -h localhostmuestra? Sin indicadores, el valor predeterminado es el usuario de la CLI, y yo habría dicho que el valor predeterminado es el administrador de base de datos "postgres", pero no tengo una mac para probar.
bma

@bma Eso me da psql: FATAL: el rol "postgres" no existe, lo que originalmente me trajo aquí -> stackoverflow.com/questions/15301826/… . Intenté usar esa respuesta pero obtengo el mismo resultado -> psql: FATAL: el "usuario" de la base de datos no existe
Ryan Rich

¿Has mirado en el registro de db? Me pregunto si se emitirían más detalles allí.
bma

12
Yo tuve el mismo problema. Solo hacerlo createdb <user>funcionó para mí.
poshaughnessy

ejecute el comando como psql -U user -d postgres, esto asegura que el usuario esté conectado a la base de datos postgres, que ya está presente. Por lo tanto, debemos pasar la base de datos también al iniciar sesión.
Anil

Respuestas:


1174

Parece que su administrador de paquetes no pudo crear la base de datos denominada $ user para usted. La razón que

psql -d template1

funciona para usted es que template1 es una base de datos creada por el propio postgres, y está presente en todas las instalaciones. Aparentemente puede iniciar sesión en template1, por lo que debe tener algunos derechos asignados por la base de datos. Pruebe esto en un indicador de shell:

createdb

y luego vea si puede volver a iniciar sesión con

psql -h localhost

Esto simplemente creará una base de datos para su usuario de inicio de sesión, que creo que es lo que está buscando. Si createdb falla, entonces no tiene suficientes derechos para crear su propia base de datos, y tendrá que descubrir cómo solucionar el paquete homebrew.


38
En mi caso escribí $ createdb -h localhostpara resolver el error could not connect to database postgres: could not connect to server. Después de eso me puedo conectar a la consola postgresql a través de psql -h localhost.
ExiRe

Todavía recibo una contraseña y no tengo idea de cuál es, ¿cuál es la contraseña predeterminada de la aplicación Postgres?
LasagnaAndroid

2
Gracias @ Kirk. ¿Realmente necesitamos -d template1en su primer comando? He visto "template1" en tutoriales en todo Internet pero solo sirve para confundirme. Un enfoque más lógico sería, en mi opinión, 1) Crear el usuario de PostgreSQL, por ejemplo, "usera" 2) Crear una base de datos con el mismo nombre que el usuario "usera" (Creo que esto es una locura, pero parece que PostgreSQL lo requiere) 3) Inicie sesión en PostgreSQL como el superusuario "postgres" y asigne los privilegios de la base de datos "usera" al usuario "usera" (oh, Dios mío, ¿es realmente la vida real?)
ericn

@eric: -d template1 solo está allí para verificar que el OP pueda iniciar sesión en absoluto. Como se crea en tiempo initdb, siempre existe, y fue una comprobación fácil. A partir de ese momento, su procedimiento es generalmente "la vida real".
Kirk Roybal

@ExiRe Acabas de curar un gran dolor de cabeza que estaba teniendo con un simple comando. ¡Gracias!
Dave Munger

194

Desde la terminal, simplemente ejecute el comando en la ventana del símbolo del sistema. (No dentro de psql) .

createdb <user>

Y luego intente ejecutar postgres nuevamente.


3
¡Hermoso! Esto lo hizo! Después de ejecutar esto, ¡todos los comandos de psql funcionan de maravilla! ¡gracias una tonelada!
naturalista

1
Y estaba intentando en la plantilla psql. maldición
user1735921

2
también puedes corrercreatedb
Mantisimo

consejo para usuarios como yo;) (No dentro de psql). significa que cuando abres la ventana de terminal, ingresa este createdb como primer comando y luego intenta iniciar sesión en psql.
Rohan Dodeja

¡Excelente! Trabajó para mí en OSX.
darkhipo

150

Por defecto, postgres intenta conectarse a una base de datos con el mismo nombre que su usuario. Para evitar este comportamiento predeterminado, solo especifique el usuario y la base de datos:

psql -U Username DatabaseName 

14
Gracias, ¿conoce la razón de tal diseño? ¿Por qué querría ir a mi base de datos de mi nombre por defecto?
ericn

3
Las bases de datos @eric a menudo son utilizadas por servicios que se ejecutan como usuarios dedicados. Así que supongo que la estrategia de usar el nombre de usuario como el nombre predeterminado de la base de datos es probablemente más útil que usar algún nombre fijo predeterminado de la base de datos (por ejemplo, "postgres").
user686249

55
¿Cómo se ejecuta el script SQL que realmente crea la base de datos? en mi caso, siempre intenta conectarse a la base de datos <usuario> cuando mi objetivo es crear otra base de datos: psql -U Username -f create_db.sqlesto devolverá el error:database Username doesn't exists
Kostanos

Fantástica respuesta gracias, pero plantea la pregunta de por qué no está en la línea de comando de ayuda? psql --help
Shawn Vader

1
psql -U Username postgrescuando aún no tienes bases de datos
Anatolii Stepaniuk

59
  1. Inicie sesión como usuario predeterminado: sudo -i -u postgres
  2. Crear nuevo usuario: createuser --interactive
  3. Cuando se le solicite el nombre del rol, ingrese el nombre de usuario de Linux y seleccione Sí a la pregunta del superusuario.
  4. Aún conectado como usuario de postgres, cree una base de datos: createdb <username_from_step_3>
  5. Confirme que los errores hayan desaparecido ingresando: psqlen el símbolo del sistema.
  6. La salida debe mostrar psql (x.x.x) Type "help" for help.

Hombre, me salvaste mucho tiempo.
Jp Reddy

Necesitaba hacer esto en Windows. Establezca el nuevo nombre de usuario pg en Linux un. Fijo.
RichieRich

Esto funcionó para mí como encanto
Promise Preston

42

Inicie sesión con la base de datos predeterminada template1:

#psql -d template1
#template1=# \l

  List of databases
   Name    |  Owner  | Encoding |   Collate   |    Ctype    |  Access privileges  
-----------+---------+----------+-------------+-------------+---------------------
 postgres  | gogasca | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 template0 | gogasca | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/gogasca         +
           |         |          |             |             | gogasca=CTc/gogasca
 template1 | gogasca | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/gogasca         +
           |         |          |             |             | gogasca=CTc/gogasca
(3 rows)

Cree una base de datos con su ID de usuario:

template1=# CREATE DATABASE gogasca WITH OWNER gogasca ENCODING 'UTF8';
CREATE DATABASE

Salga y vuelva a iniciar sesión

template1=# \q
gonzo:~ gogasca$ psql -h localhost
psql (9.4.0)
Type "help" for help.

gogasca=# \l
                                List of databases
   Name    |  Owner  | Encoding |   Collate   |    Ctype    |  Access privileges  
-----------+---------+----------+-------------+-------------+---------------------
 gogasca   | gogasca | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 postgres  | gogasca | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 template0 | gogasca | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/gogasca         +
           |         |          |             |             | gogasca=CTc/gogasca
 template1 | gogasca | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/gogasca         +
           |         |          |             |             | gogasca=CTc/gogasca
(4 rows)

20

Me enfrenté al mismo error cuando intenté abrir postgresql en mac

psql: FATAL:  database "user" does not exist

Encontré este comando simple para resolverlo:

Método 1

$ createdb --owner=postgres --encoding=utf8 user

y escribe

 psql

Método 2:

psql -d postgres

55
Método 2 me salvó la vida
tom10271

9

Tuve el mismo problema, un simple lo psql -d postgreshizo (Escriba el comando en la terminal)


6

Este error también puede ocurrir si la variable de entorno PGDATABASE se establece en el nombre de una base de datos que no existe.

En OSX, vi el siguiente error al intentar iniciar psql desde el menú Postgress.app:

psql: FATAL: database "otherdb" does not exist

La solución al error fue eliminar export PGDATABASE=otherdbde ~/.bash_profile:

Además, si PGUSER está configurado en algo diferente a su nombre de usuario, se producirá el siguiente error:

psql: FATAL: role "note" does not exist

La solución es eliminar export PGUSER=notmede ~/.bash_profile.


5

Después de la instalación de postgres, en mi caso la versión es la 12.2, ejecuté el siguiente comando createdb.

$ createdb `whoami`

$ psql

psql (12.2)
Type "help" for help.

macuser=# 

aplausos esto funcionó para mí
FaISalBLiNK

4

Como esta pregunta es la primera en los resultados de búsqueda, de todas formas pondré una solución diferente para un problema diferente, para no tener un título duplicado.

El mismo mensaje de error puede aparecer al ejecutar un archivo de consulta psqlsin especificar una base de datos. Como no hay una usedeclaración en postgresql, tenemos que especificar la base de datos en la línea de comando, por ejemplo:

psql -d db_name -f query_file.sql

1
y db template1 siempre existe
enero

4

Como dice la documentación de createdb :

El comando initdb siempre crea la primera base de datos cuando se inicializa el área de almacenamiento de datos ... Esta base de datos se llama postgres.

Entonces, si ciertas distribuciones de OS / postgresql lo hacen de manera diferente, ciertamente no es el estándar / predeterminado (solo verificó que initdben openSUSE 13.1 crea el DB "postgres", pero no "<user>"). En pocas palabras, psql -d postgresse espera que se use cuando se usa un usuario que no sea "postgres".

Obviamente, la respuesta aceptada, que se ejecuta createdbpara crear un DB llamado como el usuario, también funciona, pero crea un DB superfluo.


1

tuvo el problema con el uso del controlador JDBC, por lo que uno solo tiene que agregar la base de datos (tal vez de forma redundante dependiendo de la herramienta que pueda usar) después del nombre de host en la URL, por ejemplo jdbc:postgres://<host(:port)>/<db-name>

Aquí se documentan más detalles: http://www.postgresql.org/docs/7.4/static/jdbc-use.html#JDBC-CONNECT


Sé que está un poco fuera de tema teniendo en cuenta que solo se le pidió psql, pero Google me trajo aquí con mi problema, así que creo que vale la pena mencionarlo aquí
Andreas Dietrich,

1

Conéctese a postgres a través del superusuario existente.

Cree una base de datos con el nombre del usuario al que se está conectando a postgres.

create database username;

Ahora intenta conectarte por nombre de usuario


1

Intenta usar

psql -d postgres

También estaba enfrentando el mismo problema cuando corrí psql


0

En primer lugar, es útil crear una base de datos con el mismo nombre que su uso actual, para evitar el error cuando solo desea usar la base de datos predeterminada y crear nuevas tablas sin declarar explícitamente el nombre de una base de datos.

Reemplace "skynotify" con su nombre de usuario:

psql -d postgres -c "CREATE DATABASE skynotify ENCODING 'UTF-8';"

-d declara explícitamente qué base de datos usar como predeterminada para las instrucciones SQL que no incluyen explícitamente un nombre de base de datos durante esta sesión interactiva.

BÁSICOS PARA OBTENER UNA IMAGEN CLARA DE LO QUE TIENE SU SERVIDOR PostgresQL en él.

Debe conectarse a una base de datos existente para usar psql de forma interactiva. Afortunadamente, puede pedirle a psql una lista de bases de datos:

psql -l

.

                                          List of databases
               Name               | Owner  | Encoding |   Collate   |    Ctype    | Access privileges 
----------------------------------+-----------+----------+-------------+-------------+-------------------
 skynotify                        | skynotify | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 myapp_dev                        | skynotify | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 postgres                         | skynotify | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 ruby-getting-started_development | skynotify | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 template0                        | skynotify | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/skynotify          +
                                  |           |          |             |             | skynotify=CTc/skynotify
 template1                        | skynotify | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/skynotify          +
                                  |           |          |             |             | skynotify=CTc/skynotify
(6 rows)

Esto NO inicia la consola interactiva, solo emite una tabla basada en texto al terminal.

Como dice otra respuesta, postgres siempre se crea, por lo que debe usarlo como su base de datos a prueba de fallas cuando solo desea que la consola comience a funcionar en otras bases de datos. Si no está allí, enumere las bases de datos y luego use cualquiera de ellas.

De manera similar, seleccione tablas de una base de datos:

psql -d postgres -c "\dt;"

Mi base de datos "postgres" no tiene tablas, pero cualquier base de datos que lo haga generará una tabla basada en texto al terminal (salida estándar).

Y para completar, también podemos seleccionar todas las filas de una tabla:

psql -d ruby-getting-started_development -c "SELECT * FROM widgets;"

.

 id | name | description | stock | created_at | updated_at 
----+------+-------------+-------+------------+------------
(0 rows)

Incluso si se devuelven cero filas, obtendrá los nombres de campo.

Si sus tablas tienen más de una docena de filas, o no está seguro, será más útil comenzar con un recuento de filas para comprender cuántos datos hay en su base de datos:

 psql -d ruby-getting-started_development -c "SELECT count(*) FROM widgets;"

.

 count 
-------
     0
(1 row)

Y no te confunda esa "1 fila", solo representa cuántas filas devuelve la consulta, pero la 1 fila contiene el recuento que deseas, que es 0 en este ejemplo.

NOTA: una base de datos creada sin un propietario definido será propiedad del usuario actual.


0

Probé algunas de estas soluciones, pero no funcionaron (¡aunque estaban en el camino correcto!)

Al final mi error fue:

FATAL: la autenticación de contraseña falló para el usuario

cuando ejecuté el siguiente comando: psql

Entonces ejecuté estos dos comandos:

dropdb()
createdb()

NOTA: este se retire el PP, pero no lo necesitamos, y por alguna razón ya no podía PQSL acceso, por lo que eliminar y crear de ella. Luego psqltrabajó de nuevo.


0

No estoy seguro si ya se agregó en las respuestas, la respuesta de Anatolii Stepaniuk fue muy útil, que es la siguiente.

psql -U Username postgres # when you have no databases yet

-1

Tuve este problema al instalar postgresql a través de homebrew.

Tuve que crear el superusuario "postgres" predeterminado con:

createuser - respuesta interactiva de postgres y para superusuario

createuser: respuesta interactiva del usuario y para superusuario


-3

Todavía tenía el problema anterior después de instalar postgresql usando homebrew: lo resolví poniendo / usr / local / bin en mi ruta antes de / usr / bin


-12

En su explicación más simple; Es un problema novato. Solo escribiendo

pgres

dará como resultado esta respuesta.

pgres <db_name> 

tendrá éxito sin error si el usuario tiene los permisos para acceder a la base de datos.

Uno puede entrar en los detalles de las variables de entorno exportadas, pero eso es innecesario ... esto es demasiado básico para fallar por cualquier otra razón.


55
Realmente no me gusta el "tipo de lenguaje novato"
Kimmo Hintikka

Además, no recomendó cómo resolver el problema, por lo que no respondió la pregunta.
Deborah el

1
Nunca oído hablar depgres
Glenn Plas
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.