config/database.ymlで定義しているユーザがPostgreSQL上でデータベース作成権限を持っていないため、上記のエラーがでる。まずは、状況確認。rails_userというのがconfig/database.ymlで定義しているユーザとする。
% sudo su postgres % psql # \du List of roles Role name | Attributes | Member of ---------------+------------------------------------------------+----------- rails_user | | {} hogehoge | Superuser, Create role, Create DB, Replication | {} postgres | Superuser, Create role, Create DB, Replication | {}
「Create DB」という権限をつけてやる。DB Online:PostgreSQLの使い方 > ロール(ユーザー)の作成 >ロールの変更を参考に権限をつける。
# ALTER ROLE rails_user WITH CREATEDB; # \du List of roles Role name | Attributes | Member of ---------------+------------------------------------------------+----------- rails_user | Create DB | {} hogehoge | Superuser, Create role, Create DB, Replication | {} postgres | Superuser, Create role, Create DB, Replication | {}
これで「rake db:create」を実行できる。でも、「rake db:migrate:reset」をするとdropdbの権限がないと怒られる。Create DBできるのにDROP DBできないの?