"PG::InsufficientPrivilege: ERROR: permission denied to create database"がでたとき

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できないの?