Error de PostgreSQL: fatal: el rol "nombre de usuario" no existe

734

Estoy configurando mi PostgreSQL 9.1. No puedo hacer nada con PostgreSQL: no createdbpuedo, no puedo createuser; todas las operaciones devuelven el mensaje de error

Fatal: role h9uest does not exist

h9uestes mi nombre de cuenta, y sudo apt-get installPostgreSQL 9.1 bajo esta cuenta.
Error similar persiste para la rootcuenta.

h9uest
fuente
1
Después usted podría encontrarse FATAL: role "user" is not permitted to log in, comprobar dba.stackexchange.com/questions/57723/... para eso.
kqw
19
Respondí esta pregunta aquí . Lea también este tutorial " Cómo instalar Postgres para Ubuntu Linux ".
ruzenhack
@Ruzenhack ese enlace tutorial fue exactamente lo que necesitaba! Muy claro y simple
dwanderson
44
psql -h localhost -U postgres
Metin Atalay
Si obtiene el error role doesn't existY el error, can't create role, it already existsconsulte esta respuesta: stackoverflow.com/a/56658832/1689770
Jonathan

Respuestas:

775

Use el usuario del sistema operativo postgres para crear su base de datos, siempre y cuando no haya configurado una función de base de datos con los privilegios necesarios que correspondan al usuario del mismo nombre del sistema operativo ( h9uesten su caso):

sudo -u postgres -i

Como se recomienda aquí o aquí .

Vuelva a intentarlo. Escriba exitcuando termine de operar como usuario del sistema postgres.

O ejecute el comando único createusercomo postgrescon sudo, como lo demuestran los drees en otra respuesta.

El punto es utilizar el usuario del sistema operativo que coincida con la función de la base de datos del mismo nombre para obtener acceso mediante identautenticación . postgreses el usuario predeterminado del sistema operativo que ha inicializado el clúster de base de datos. El manual:

Para arrancar el sistema de base de datos, un sistema recién inicializado siempre contiene un rol predefinido. Este rol es siempre un "superusuario" y, de manera predeterminada (a menos que se modifique durante la ejecución initdb) tendrá el mismo nombre que el usuario del sistema operativo que inicializó el clúster de la base de datos. Habitualmente, se nombrará este rol postgres. Para crear más roles, primero debe conectarse como este rol inicial.

He oído hablar de configuraciones extrañas con nombres de usuario no estándar o donde el usuario del sistema operativo no existe. Tendría que adaptar su estrategia allí.

Lea sobre los roles de la base de datos y la autenticación del cliente en el manual.

Erwin Brandstetter
fuente
1
Es imposible ejecutarlo sudo etccomo usuario postgres ... ¿Cómo instalar un programa? Consulte este problema de instalación de S2geometry .
Peter Krauss
Dependiendo de la configuración, uno simplemente podría necesitar su postgres.
Fabien Snauwaert
1
sudo -u postgresno funciona, mientras sudo -u postgres -ifunciona! ¿Qué hace la -ibandera?
analizador el
1
@parsecer: se inicia un shell interactivo, similar a su, pero basado en privilegios de sudo. Ver man sudo.
Erwin Brandstetter
284

Después de probar las soluciones de muchas otras personas, y sin éxito, esta respuesta finalmente me ayudó.

https://stackoverflow.com/a/16974197/2433309

En resumen, corriendo

sudo -u postgres createuser owning_user

crea un rol con el nombre owning_user (en este caso, h9uest). Después de eso, puede ejecutar rake db:createdesde el terminal con cualquier nombre de cuenta que configure sin tener que ingresar al entorno de Postgres.

Drees
fuente
29
Si obtiene un error de "privilegios insuficientes" después de esto, puede agregar el indicador -s al comando anterior. Esto creará su nuevo usuario como superusuario. Tenga en cuenta las implicaciones de seguridad de esto si decide hacerlo.
sarink
1
Recibo "privilegios insuficientes", pero ahora recibo ERROR: el rollo "nombre de usuario" ya existe.
Wylliam Judd
55
@ConnorLeech Puede reemplazar 'postgres' con el nombre de su superusuario de PG. En mi caso era mi nombre.
myfashionhub
1
También tuve que usar -s, y no necesitaba usar sudo -u postgres(solo createuser new_userfuncionó bien)
Meekohi
2
psql: FATAL: role "jonny" does not existbien, sudo -u postgres -s createuser jonnyentonces ¿por qué createuser: creation of new role failed: ERROR: role "jonny" already exists
Jonathan
134
sudo su - postgres

psql template1

creando rol en pgsql con privilegio como "superusuario"

CREATE ROLE username superuser;
eg. CREATE ROLE demo superuser;

Luego crea un usuario

CREATE USER username; 
eg. CREATE USER demo;

Asignar privilegio al usuario

GRANT ROOT TO username;

Y luego habilite el inicio de sesión de ese usuario, para que pueda ejecutar, por ejemplo: psql template1desde el $terminal normal :

ALTER ROLE username WITH LOGIN;
Mohammed Saleem
fuente
44
Acabo de hacer una nueva instalación de PostgreSQL 9.4.4 y pude usar el siguiente para crear un nuevo superusuario: CREATE ROLE username superuser createdb login; que combina los tres pasos ...
iPad Guy
25
# OTORGAR RAÍZ para mí; ERROR: el rol "raíz" no existe
shacker
66
versión más simple: sudo -u postgres createuser --superuser $USER; sudo -u postgres createdb $USER
Zach Estela
2
@shacker#GRANT postgres TO username
7kemZmani
Estoy usando root para iniciar el servidor y luego `` `psql -U postgres -h 127.0.0.1 --command" CREAR USER postgresondocker CON LA CONTRASEÑA DEL SUPERUSUARIO 'postgresondocker'; " && \ createdb -O postgresondocker postgresondocker`` ¿puedo usar root para hacer esto si lo agrego al pg_ident?
Shivangi Singh
85

Instalar postgres usando apt-getno crea un rol de usuario o una base de datos.

Para crear un rol de superusuario y una base de datos para su cuenta de usuario personal:

sudo -u postgres createuser -s $(whoami); createdb $(whoami)

Miles Erickson
fuente
1
Necesitaba ejecutar la segunda parte como:sudo -u postgres createdb $(whoami)
SanD
2
@SanD Si ha creado su propia cuenta de usuario como superusuario (a través de la -sbandera en el primer comando), puede crear la base de datos como usted mismo. No necesitarás correr createdbcomo postgres.
Miles Erickson
2
¡Gran respuesta! ¡Me ahorró horas de depuración!
Aminu Kano
79

Esto funciona para mi:

psql -h localhost -U postgres
mateusz.szymborski
fuente
agregue la contraseña para el usuario anterior.
Chaudhry Waqas
1
@Vincent si la contraseña nunca se cambió después de la instalación de PostgreSQL, por defecto es postgres(probado en Linux y Windows).
silvioprog
1
role postgres does not exist
Jacob Schneider
15

Método de trabajo,

  1. vi /etc/postgresql/9.3/main/pg_hba.conf
  2. local all postgres peer aquí cambiar de pares de confianza
  3. reiniciar, sudo service postgresql restart

  4. ahora intenta, psql -U postgres

Mohideen bin Mohammed
fuente
1
Debería ser obvio que el trustmétodo solo es aconsejable en un entorno completamente seguro. Si bien es posible el acceso desde conexiones no confiables, nunca exponga su clúster de base de datos de esa manera.
Erwin Brandstetter
este es bueno
horoyoi o
Comprobación: si el servicio postgresql no se inicia, posiblemente puede haber algún error en el archivopg_hba.conf
Camine el
11

Para la versión Postgres 9.5, use el siguiente comando:

psql -h localhost -U postgres

Espero que esto ayude.

Kalyan Halder Raaz
fuente
11
psql postgres

postgres=# CREATE ROLE username superuser;
postgres=# ALTER ROLE username WITH LOGIN;
Abel
fuente
44
psql postgresresultados:psql: FATAL: role "root" does not exist
TomSawyer
2
psql postgres -U postgres? Depende del usuario (-U) que tenga.
Meadowlark Bradsher
¡gracias! Me costó cómo hacer una copia de seguridad de postgresql con root ya que no sé la contraseña de postgres
Dika
7

En el indicador de usuario local, no en el indicador de usuario raíz, escriba

sudo -u postgres createuser <local username>

Luego ingrese la contraseña para el usuario local.

Luego ingrese el comando anterior que generó "el rol 'nombre de usuario' no existe".

Los pasos anteriores resolvieron el problema para mí. De lo contrario, envíe mensajes de terminal para los pasos anteriores.

Robert Cambil
fuente
3

La creación manual de un clúster de DB lo resolvió en mi caso.

Por alguna razón, cuando instalé postgres, no se creó el "DB inicial". Ejecutar initdbhizo el truco para mí.

Esta solución se proporciona en el Wiki de PostgreSQL - Primeros pasos :

initdb

Normalmente, la instalación de postgres en su sistema operativo crea una "base de datos inicial" e inicia la ejecución del demonio del servidor postgres. De lo contrario, deberá ejecutar initdb

Natacha
fuente
2

Para Windows usuarios de :psql -U postgres

Entonces debería ver la interfaz de línea de comandos para PostgreSQL: postgres=#

Andriy Tolstoy
fuente
0

Siga estos pasos y funcionará para usted:

  1. correr msfconsole
  2. escriba db_console
  3. se le mostrará cierta información, elija la información que le diga que haga: lo db_connect user:pass@host:port.../databasesiento, no la recuerdo, pero es como esta, luego reemplace el usuario y la contraseña y el host y la base de datos con la información incluida database.ymlen el emplazamiento :/usr/share/metasploit-framework/config
  4. ya verás. reconstruyendo el modelo de caché en el fondo.
  5. Escribe apt-get update && apt-get upgrade después de la actualización, reinicia el terminal y almuerza msfconsole y funciona. Puedes verificar que al escribirlo msfconsole: msf>db_statusverás que está conectado.
Loli Pronoms
fuente
0

volcar y restaurar con --no-owner --no-privileges banderas

p.ej

volcado pg_dump --no-owner --no-privileges --format=c --dbname=postgres://userpass:username@postgres:5432/schemaname > /tmp/full.dump

restaurar pg_restore --no-owner --no-privileges --format=c --dbname=postgres://userpass:username@postgres:5432/schemaname /tmp/full.dump

srghma
fuente