Role does not exist and unable to create database when using PostgreSQL

后端 未结 3 2082
鱼传尺愫
鱼传尺愫 2020-12-07 07:45

I am using Heroku for my application and it requires PostgreSQL but you can still use SQLite3 for development. Since Heroku strongly advised against having 2 different datab

相关标签:
3条回答
  • 2020-12-07 08:27

    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.

    0 讨论(0)
  • 2020-12-07 08:31

    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 postgres
    postgres=# 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.

    0 讨论(0)
  • 2020-12-07 08:31

    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!

    0 讨论(0)
提交回复
热议问题