Role does not exist and unable to create database when using PostgreSQL
Add a username to your database.yml
, might as well use your application's name (or some variant of the name) as the username, I'll use app_name
as a placeholder:
development: adapter: postgresql encoding: utf8 database: app_development pool: 5 username: app_name password:
Then create the user (AKA "role") inside PostgreSQL using psql.exe
:
$ psql -d postgrespostgres=# create role app_name login createdb;postgres=# \q
The first line is in your terminal, the next two are inside psql
. Then do your rake db:create
.
The User
user is possibly a default but user
is already taken for other purposes in PostgreSQL so you'd have to quote it to preserve the case if you wanted to use User
as a username:
postgres=# create role "User" login createdb;
You're better off creating one user per-application anyway.
You'll want to do similar things for your test
entry in database.yml
as well.
PostgreSQL will try to create the database with your account (login) name if a username
isn't specified in your config/database.yml
. On OS X and Linux you can you see who this is with whoami
. Looks like you're using Windows.
Solution A:Create a PostgreSQL user that matches the one it's looking for. For example
createuser --superuser some_user
Solution B:Change the DB user by explicitly setting a username as shown in mu's answer.
If you have a specific account/user on your machine for postgres called postgres for example.
Then executing this command will bring a prompt for you to enter a role name.
sudo -u postgres createuser --interactive
Then doing
rake db:create
Should work!