ruby-on-rails - tutorial - rails postgresql jsonb
Rails y PostgreSQL: rol postgres no existe (12)
He instalado PostgreSQL en mi Mac OS Lion, y estoy trabajando en una aplicación de rieles. Uso RVM para mantener todo separado de mis otras aplicaciones de Rails.
Por alguna razón, cuando trato de migrar el db por primera vez, rake no puede encontrar al usuario de postgres. Me sale el error
FATAL: role "postgres" does not exist
Tengo pgAdmin así que puedo ver claramente que hay un usuario de postgres en el DB, la cuenta de administrador, de hecho, así que no estoy seguro de qué más hacer.
Leí en algún lado que las personas tenían problemas con PostgreSQL debido a la ruta en la que estaba instalado, pero no creo que hubiera llegado tan lejos si no hubiera podido encontrar el archivo db.
¿Podría tener múltiples bases de datos locales? Verifique su database.yml
y asegúrese de estar presionando el pg db que desea. Usa la rails console
para confirmar.
Conocí este problema justo cuando instalé por primera vez el elemento POSTGRES.app de Heroku. Después de una prueba y un error de una mañana, creo que esta única línea de código resolvió el problema. Como se describió anteriormente, esto se debe a que postgresql no tiene la función predeterminada la primera vez que se configura. Y tenemos que establecer eso.
sovanlandy=# CREATE ROLE postgres LOGIN;
Debe iniciar sesión en su respectiva consola psql para usar este comando psql.
También se observó que, si ya creaste el rol ''postgre'' pero todavía recibes los permisos, debes modificarlo con el comando:
sovanlandy=# ALTER ROLE postgres LOGIN;
¡Espero eso ayude!
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.
En el archivo database.yml, cambio los nombres de usuario predeterminados al nombre de usuario de mi computadora, que para mí es solo "admin".
En la línea de comando ejecuto rake db: create: all
Luego ejecuto rake db: migrate
Cuando ejecuto el servidor de rieles y verifico el host local, dice "Bienvenido a bordo".
En el indicador de comandos del usuario local de Ubuntu, pero no en el usuario raíz, escriba
sudo -u postgres createuser nombre de usuario
nombre de usuario anterior debe coincidir con el nombre indicado en el mensaje "FATAL: rol ''nombre de usuario'' no existe."
Ingrese la contraseña para el nombre de usuario.
Luego, vuelva a ingresar el comando que generó la función de mensaje no existe.
En la documentación de Heroku; Comenzando con raíles 4, dicen:
También necesitará eliminar el campo de nombre de usuario en su base de datos.yml si hay uno así: En file config / database.yml remove: 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 el rol de myapp. Como es probable que no tenga este rol en su base de datos, lo eliminaremos. Con la línea eliminar Rails intentará acceder a la base de datos como usuario que está actualmente conectado a la computadora.
Recuerde también crear la base de datos para el desarrollo:
$createdb myapp_development
Repleace "myapp" para el nombre de su aplicación
En realidad, por algún motivo desconocido, descubrí que el problema se debía a que no se había creado el rol 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 ninguna función para el usuario de postgres, entonces no puede acceder a nada. El comando createuser es una wrapper delgada alrededor de los comandos CREATE USER, CREATE ROLE, etc.
Es posible que pueda solucionar este problema ejecutando initdb -U postgres -D /path/to/data
o ejecutándolo como usuario postgres, ya que el valor predeterminado es el usuario actual. GL!
Estaba en OSX 10.8, y todo lo que intenté me daría FATAL: role "USER" does not exist
. Al igual que mucha gente dijo aquí, ejecuta createuser -s USER
, pero eso me dio el mismo error. Esto finalmente funcionó para mí:
$ sudo su
# su postgres
# createuser -s --username=postgres MYUSERNAME
createuser -s --username=postgres
crea un superusuario (-s indicador) al conectarse como postgres (--username = postgres flag).
Veo que su pregunta ha sido respondida, pero quiero agregar esta respuesta para personas que usan OSX e intentan instalar PostgreSQL 9.2.4.
Este mensaje aparece cuando el usuario de la base de datos no existe. Compare el manual aquí .
Múltiples bases de datos locales no pueden ser la explicación. Los roles son válidos para todo el clúster. El manual nuevamente :
Tenga en cuenta que los roles se definen en el nivel del clúster de la base de datos, por lo que son válidos en todas las bases de datos del clúster.
Debe terminar en otro cluster 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 llegue, de hecho, desde el servidor remoto?
Mi respuesta fue mucho más simple. Acabo de ir a la carpeta db y eliminé la columna de identificación, que había intentado forzar a crear, pero que en realidad se crea automágicamente. También borré el USERNAME en el archivo database.yml (debajo de la carpeta config).
Recientemente recibí este problema inmediatamente después de instalar postgres. Si se produce inmediatamente después de la instalación, es posible que le falte el usuario predeterminado, postgres. En ese caso, puede crear postgres de usuario predeterminados 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:
Le pedirá que ingrese el nombre y la contraseña requeridos para la función de la base de datos. Una vez que complete el proceso, puede iniciar sesión en la consola de postgres usando el siguiente comando
psql -U ''your_database_name''
Ej: psql -U postgres
Aquí, debe ingresar la contraseña si ha dado alguna, al crear el usuario.
Espero eso ayude :)
Terminé aquí después de intentar seguir el tutorial de Ryan Bate sobre la implementación de AWS EC2 con goma. Esto es lo que sucedió para mí: creamos una nueva aplicación usando "
rails new blog -d postgresql
Obviosuly esto crea una nueva aplicación con pg como base de datos, pero la base de datos aún no estaba hecha. Con sqlite, simplemente ejecuta rake db: migrate, sin embargo, con pg, primero debe crear la base de datos pg. Ryan no hizo este paso. El comando es rake db:create:all
, luego podemos ejecutar rake db:migrate
La segunda parte está cambiando el archivo database.yml. El valor predeterminado para el nombre de usuario cuando se genera el archivo es ''appname''. Sin embargo, es probable que su rol para el administrador 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 empezar.
Espero que esto ayude.