postgresql - una - psql fatal la autentificación peer falló para el usuario postgres
psql: FATAL: la base de datos “<usuario>” no existe (17)
Estoy usando la aplicación PostgreSql para mac ( http://postgresapp.com/ ). Lo he usado en otras máquinas en el pasado, pero me está dando algunos problemas al instalar en mi macbook. He instalado la aplicación y corrí:
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 está intentando encontrar. Lo mismo sucede cuando acabo de ejecutar:
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 las 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 ninguna. El usuario predeterminado es $ USUARIO, sin contraseña.
Por lo tanto, parece que la aplicación no está creando $ USER, sin embargo, he instalado-> desinstalé-reinstalé 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 como el usuario que respondió en este hilo -> Cómo ejecutar Postgresql en Mac: la base de datos "postgres" no existe . Usé el siguiente comando para hacer que psql se abra:
psql -d template1
Dejaré este sin respuesta hasta que alguien pueda dar una explicación de por qué funciona esto.
- Inicie sesión como usuario predeterminado:
sudo -i -u postgres
- Crear nuevo usuario:
createuser --interactive
- Cuando se le solicite el nombre del rol, ingrese el nombre de usuario de linux y seleccione Sí para la pregunta del superusuario.
- Aún con la sesión iniciada como usuario de postgres, cree una base de datos:
createdb <username_from_step_3>
- Confirme que los errores desaparecieron al ingresar:
psql
en el símbolo del sistema. - La salida debe mostrar
psql (xxx) Type "help" for help.
Como dice la documentación createdb :
La primera base de datos siempre es creada por el comando initdb cuando se inicializa el área de almacenamiento de datos ... Esta base de datos se llama postgres.
Entonces, si ciertas distribuciones de SO / postgresql lo hacen de manera diferente, ciertamente no es el estándar / predeterminado (solo se verificó que initdb
en openSUSE 13.1 crea el DB "postgres", pero no "<user>"). En pocas palabras, se espera que se use psql -d postgres
cuando se use un usuario que no sea "postgres".
Obviamente, la respuesta aceptada, ejecutar createdb
para crear una base de datos llamada como el usuario, también funciona, pero crea una base de datos superflua.
Como esta pregunta es la primera en los resultados de búsqueda, pondré aquí una solución diferente para un problema diferente de todos modos, para no tener un título duplicado.
El mismo mensaje de error puede aparecer cuando se ejecuta un archivo de consulta en psql
sin especificar una base de datos. Como no hay una declaración de use
en postgresql, tenemos que especificar la base de datos en la línea de comandos, por ejemplo:
psql -d db_name -f query_file.sql
Desde el terminal, simplemente ejecute el comando en la ventana del símbolo del sistema. (No dentro de psql) .
createdb <user>
Y luego tratar de ejecutar postgres de nuevo.
En primer lugar, es útil crear una base de datos con el mismo nombre que su uso actual, para evitar el error cuando solo quiere usar la base de datos predeterminada y crear nuevas tablas sin declarar explícitamente el nombre de una db.
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 predeterminado para las sentencias de SQL que no incluyen explícitamente un nombre de db durante esta sesión interactiva.
FUNDAMENTOS PARA OBTENER UNA IMAGEN CLARA DE LO QUE TIENE SU SERVIDOR PostgresQL.
Debe conectarse a una base de datos existente para usar psql de forma interactiva. Afortunadamente, puede solicitar 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 genera una tabla basada en texto para el terminal.
Como dice otra respuesta, postgres siempre se crea, por lo que debe usarla como su base de datos a prueba de fallas cuando solo quiere que la consola comience a trabajar 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 en el 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 hay cero filas devueltas, obtendrás los nombres de los campos.
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 la cantidad de datos en su base de datos:
psql -d ruby-getting-started_development -c "SELECT count(*) FROM widgets;"
.
count
-------
0
(1 row)
Y no confunda en que "1 fila" lo confunda, solo representa cuántas filas devuelve la consulta, pero la fila 1 contiene el recuento que desea, que es 0 en este ejemplo.
NOTA: una db creada sin un propietario definido será propiedad del usuario actual.
En su explicación más simple; Es un problema de noob. Solo escribiendo
pgres
resultará en 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 no es necesario ... esto es demasiado básico para fallar por cualquier otra razón.
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ú de Postgress.app:
psql: FATAL: database "otherdb" does not exist
La solución al error fue eliminar la export PGDATABASE=otherdb
de ~/.bash_profile
:
Además, si PGUSER está configurado con un nombre distinto a su nombre de usuario, ocurrirá el siguiente error:
psql: FATAL: role "note" does not exist
La solución es eliminar export PGUSER=notme
de ~/.bash_profile
.
Inicie sesión con la base de datos predeterminada de la plantilla 1:
#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)
Crea una base de datos con tu ID de usuario:
template1=# CREATE DATABASE gogasca WITH OWNER gogasca ENCODING ''UTF8'';
CREATE DATABASE
Salir y luego volver 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)
Me encontré con el mismo error cuando intentaba abrir postgresql en mac
psql: FATAL: database "user" does not exist
Encontré este simple comando para resolverlo:
Método 1
$ createdb --owner=postgres --encoding=utf8 user
y escriba
psql
Método 2:
psql -d postgres
Parece que su administrador de paquetes no pudo crear la base de datos llamada $ usuario para usted. La razón que
psql -d template1
El trabajo para usted es que template1 es una base de datos creada por 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. Intente esto en un indicador de shell:
createdb
y luego ver si puede iniciar sesión de nuevo 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 averiguar cómo arreglar el paquete homebrew.
Por defecto, Postgres intenta conectarse a una base de datos con el mismo nombre que su usuario. Para evitar este comportamiento predeterminado, solo especifique usuario y base de datos:
psql -U Username DatabaseName
Probé algunas de estas soluciones, pero no funcionaron del todo (¡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: esto eliminará la db, pero no la necesité y por alguna razón ya no pude acceder a pqsl, así que la eliminé y la recreé. Entonces psql
trabajó de nuevo.
Si recibe este error al implementar un proyecto de Rails con Capistrano, es posible que desee crear una base de datos en su servidor remoto.
Inicia sesión en tu Ubuntu y ejecuta:
sudo -u postgres psql
Introduzca su contraseña de usuario postgres si se le solicita. Ahora crea tu base de datos ingresando:
CREATE DATABASE dbname_production;
El nombre debe ser el que especificó en shared/config/database.yml
en su servidor de producción.
Salir ingresando /q
Tenía el mismo problema, un simple psql -d postgres
hizo (Escriba el comando en el terminal)
Todavía tenía el problema anterior después de instalar postgresql usando homebrew - Lo resolví poniendo / usr / local / bin en mi camino antes de / usr / bin
Tuvo este problema al instalar postgresql a través de homebrew.
Tenía que crear el superusuario predeterminado "postgres" con:
createuser --interactive postgres responde y para superusuario
createuser - usuario interactivo responde y para superusuario
tuvo el problema con el uso del controlador JDBC, por lo que solo tiene que agregar la base de datos (tal vez de forma redundante, dependiendo de la herramienta que pueda usar) después del nombre del host en la URL, por ejemplo, jdbc:postgres://<host(:port)>/<db-name>
más detalles se documentan aquí: http://www.postgresql.org/docs/7.4/static/jdbc-use.html#JDBC-CONNECT