Rails y PostgreSQL: el rol de postgres no existe

106

He instalado PostgreSQL en mi Mac OS Lion y estoy trabajando en una aplicación de rieles. Utilizo RVM para mantener todo separado de mis otras aplicaciones de Rails.

Por alguna razón, cuando trato de migrar la base de datos por primera vez, rake no puede encontrar el usuario de postgres. Me sale el error

 FATAL:  role "postgres" does not exist

Tengo pgAdmin, por lo que puedo ver claramente que hay un usuario de postgres en la base de datos, la cuenta de administrador de hecho, así que no estoy seguro de qué más hacer.

Leí en algún lugar sobre personas que tienen problemas con PostgreSQL debido a la ruta en la que se instaló, pero luego no creo que hubiera llegado tan lejos si no hubiera podido encontrar el archivo db.

Adán
fuente
Para el problema estrechamente relacionado en el que postgresno se ha creado el usuario de base de datos (= rol) , que puede llevar al mismo mensaje de error, consulte esta pregunta relacionada: stackoverflow.com/questions/11919391/…
Erwin Brandstetter

Respuestas:

12

Este mensaje aparece cuando el usuario de la base de datos no existe. Compare el manual aquí .
Varias bases de datos locales no pueden ser la explicación. Los roles son válidos para todo el clúster. El manual de nuevo :

Tenga en cuenta que los roles se definen en el nivel del clúster de la base de datos y, por lo tanto, son válidos en todas las bases de datos del clúster.

Debe terminar en otro clúster de base de datos . Ese sería otro servidor ejecutándose en la misma máquina, escuchando un puerto diferente. O, más probablemente, en una máquina diferente.

¿Podría ser que el mensaje provenga, de hecho, del servidor remoto?

Erwin Brandstetter
fuente
Eso fue todo: he tenido dificultades para hacer que postgresql funcione, así que hice una instalación nueva, así que debo tener un par de instancias aquí ahora. Sin embargo, cambió el puerto en el archivo database.yml y todo funcionó bien. ¡Gracias por tu ayuda!
Adam
no funcionó incluso después de limpiar todas las imágenes - docker rmi $(docker images -q) --force. pero en cuestión era volumessupongo
prayagupd
267

En realidad, por alguna razón desconocida, descubrí que el problema se debía a que no se había creado la función postgresql.

Intenta ejecutar:

createuser -s -r postgres

Tenga en cuenta que los roles son la forma en que PostgreSQL mantiene los permisos de la base de datos . Si no hay un rol para el usuario de postgres, entonces no puede acceder a nada. El comando createuser es un envoltorio delgado alrededor de los comandos CREATE USER, CREATE ROLE, etc.

Chris Sherlock
fuente
8
Tuve que usar sudo su - postgresantes de que este comando funcionara para mí. ¡Gracias!
Connor Leech
2
No sé cómo surgió mi configuración, pero tenía postgresql creado sin el usuario y el rol de postgres, myUser como único usuario, ¡pero me negué a dejarme entrar con el pretexto de que la base de datos llamada myUser no existía! esta parte desenredada del caos!
Jerome
@StuartNelson: Esta parece ser la solución a un problema común (lo mismo aquí ). Pero obviamente no es la respuesta a esta pregunta. El OP establece claramente que el rol existía en su DB.
Erwin Brandstetter
Excepto que está fusionando roles con usuarios. El usuario existía, el rol no, dice claramente que el usuario existe, no el rol.
Chris Sherlock
La -ropción no es necesaria con la -sopción. El superusuario incluye el atributo "Crear rol".
Dennis
26

Recientemente tuve este problema inmediatamente después de instalar postgres. Si viene inmediatamente después de la instalación, es posible que no tenga el usuario predeterminado, postgres. En ese caso, puede crear postgres de usuario predeterminado usando el siguiente comando.

createuser -s -U $ USER

Ex: createuser -s -U $USER
enter your required role name: postgres
enter password for your the user: 

Se le pedirá que ingrese el nombre y la contraseña de la función de base de datos requerida.

psql -U 'your_database_name'

Ej: psql -U postgres
Aquí, debe ingresar la contraseña si ha dado alguna, mientras crea el usuario.

Espero eso ayude :)

Prem
fuente
22

Estaba en OSX 10.8, y todo lo que probé me dio el FATAL: role "USER" does not exist. Como dijo mucha gente aquí, corre createuser -s USER, pero eso me dio el mismo error. Esto finalmente funcionó para mí:

$ sudo su
# su postgres
# createuser -s --username=postgres MYUSERNAME

El createuser -s --username=postgrescrea un superusuario (bandera -s) conectándose como postgres (--username = bandera de postgres).

Veo que su pregunta ha sido respondida, pero quiero agregar esta respuesta para las personas que usan OSX que intentan instalar PostgreSQL 9.2.4.

Jack
fuente
2
Puede acortar las dos primeras líneas a sudo su postgres.
6ft Dan
Esta también fue la solución para mí en ubuntu, no olvide actualizar su database.yml para usar el mismo nombre de usuario que el anterior
crobicha
10

Encontré este problema justo cuando instalé por primera vez la aplicación POSTGRES.app de Heroku. Después de una mañana de prueba y error, creo que esta línea de código resolvió el problema. Como se describió anteriormente, esto se debe a que postgresql no tiene un rol predeterminado la primera vez que se configura. Y tenemos que configurar eso.

sovanlandy=# CREATE ROLE postgres LOGIN;

Debe iniciar sesión en su consola psql respectiva para usar este comando psql.

También señaló que, si ya creó el rol 'postgre' pero aún obtiene errores de permiso, debe modificarlo con el comando:

sovanlandy=# ALTER ROLE postgres LOGIN;

¡Espero eso ayude!

sovanlandy
fuente
4

En la documentación de Heroku; Comenzando con los rieles 4, dicen:

También deberá eliminar el campo de nombre de usuario en su database.yml si lo hay, así: En el archivo config / database.yml elimine: username: myapp

Luego, simplemente elimine esa línea en "desarrollo:", si no lo hace, le dice a la base de datos que funciona bajo el rol "myapp"

Esta línea le dice a rails que la base de datos myapp_development debe ejecutarse bajo un rol de myapp. Dado que es probable que no tenga este rol en su base de datos, lo eliminaremos. Con la línea remove, Rails intentará acceder a la base de datos como usuario que actualmente está conectado a la computadora.

También recuerde crear la base de datos para el desarrollo:

$createdb myapp_development

Reemplaza "myapp" por el nombre de tu aplicación

Yunrock
fuente
2

¿Podría tener varias bases de datos locales? Verifique su database.ymly asegúrese de que está presionando el pg db que desea. Use rails consolepara confirmar.

Jonathan Julian
fuente
2

El procedimiento de instalación crea una cuenta de usuario llamada postgresque está asociada con el rol predeterminado de Postgres. Para utilizar Postgres, puede iniciar sesión en esa cuenta. Pero si no se especifica explícitamente, la aplicación rails busca un rol diferente, más particularmente el rol que tiene su nombre de usuario de Unix que podría no ser creado en los roles de postgres.

Para superar eso, puede crear un nuevo rol, primero cambiando al rol predeterminado postgres que se creó durante la instalación

sudo -i -u postgres

Después de iniciar sesión en la cuenta de postgres, puede crear un nuevo usuario con el comando:

createuser --interactive

Esto le indicará algunas opciones y, según sus respuestas, ejecutará los comandos de Postgres correctos para crear un usuario.

Pase un nombre de función y algunos permisos y se crea la función, luego puede migrar su base de datos

Mayur
fuente
1

Mi respuesta fue mucho más simple. Simplemente fui a la carpeta db y eliminé la columna de identificación, que había intentado crear a la fuerza, pero que en realidad se crea automáticamente. También eliminé el NOMBRE DE USUARIO en el archivo database.yml (en la carpeta de configuración).

maudulus
fuente
1

En el símbolo del sistema del usuario local de Ubuntu, pero no el usuario root, escriba

sudo -u postgres createuser nombre de usuario

El nombre de usuario anterior debe coincidir con el nombre indicado en el mensaje "FATAL: el rol 'nombre de usuario' no existe".

Ingrese la contraseña para el nombre de usuario.

Luego, vuelva a ingresar el comando que generó el mensaje de rol no existe.

Robert Cambil
fuente
0

Terminé aquí después de intentar seguir el tutorial de Ryan Bate sobre la implementación en AWS EC2 con caucho. Esto es lo que me sucedió: Creamos una nueva aplicación usando "

rails new blog -d postgresql

Obviamente, esto crea una nueva aplicación con pg como base de datos, pero la base de datos aún no se ha creado. Con sqlite, simplemente ejecute rake db: migrate, sin embargo, con pg primero debe crear la base de datos pg. Ryan no dio este paso. El comando es rake db:create:all, entonces podemos ejecutarrake db:migrate

La segunda parte es cambiar el archivo database.yml. El nombre de usuario predeterminado cuando se genera el archivo es 'appname'. Sin embargo, es probable que su rol para el administrador de postgresql sea algo diferente (al menos lo fue para mí). Lo cambié a mi nombre (vea los consejos anteriores sobre cómo crear un nombre de rol) y estaba listo para comenzar.

Espero que esto ayude.

Andrew Shenstone
fuente
0

Después de un montón de instalación y desinstalación de Postgres, esto es lo que ahora parece funcionar de manera consistente para mí con Os X Mavericks, Rails 4 y Ruby 2.

  1. En el archivo database.yml, cambio los nombres de usuario predeterminados al nombre de usuario de mi computadora, que para mí es simplemente "admin".

  2. En la línea de comando ejecuto rake db: create: all

  3. Luego ejecuto rake db: migrate

  4. Cuando ejecuto el servidor de rails y verifico el host local, dice "Bienvenido a bordo".

Michael van Holst
fuente
0

Es posible que pueda solucionar esto ejecutándolo initdb -U postgres -D /path/to/datao ejecutándolo como postgres de usuario, ya que está predeterminado para el usuario actual. GL!

Rogerdpack
fuente