web-dev-qa-db-ja.com

rake db:create:allでデータベースを作成するためのPostgresの許可が拒否されました

開発とテスト用にpostgresデータベースを作成しようとしています。

私は使用しています...

  • OSXヨセミテ
  • Railsバージョン:4.2.0
  • gitバージョン:2.2.2
  • psqlバージョン:9.4.0
  • Rubyバージョン:2.1.0p0
  • HomeBrewバージョン:0.9.5

Gemfile ...

gem 'pg'

database.yml

default: &default
  adapter: postgresql
  encoding: unicode
  pool: 5

development:
  <<: *default
  database: myapp_development
  username: username
  password: 

test:
  <<: *default
  database: myapp_test

rake db:create:allは戻ります

PG::InsufficientPrivilege: ERROR:  permission denied to create database
: CREATE DATABASE "myapp_development" ENCODING = 'unicode'
.... (lots of tracing)
Couldn't create database for {"adapter"=>"postgresql", "encoding"=>"unicode", "pool"=>5, "database"=>"myapp_development", "username"=>"username", "password"=>nil}
myapp_test already exists

なにが問題ですか?

[〜#〜] edit [〜#〜] database.ymlのユーザー名をMacで使用しているユーザー名に変更しようとしました。出来た。また、maybe_test' already exists, but it also just told me thatmyapp_development`もすでに存在します。

  • 私が作成し、CREATEDBにロールを割り当てた他のユーザー名を使用できないのはなぜですか?
  • 開発が作成できなかったと言って、それがすでに存在していると言ったのはなぜですか?

これは非常に混乱しすぎているようで、非常に昔のApacheでのPHPセットアップを思い出させます。新しいアプリを作成するたびに問題に対処する必要はありません。また、開発中にもpostgresを使用するためにherokuの推奨事項に従ってください。

33
Beengie

Ruby on Railsプロジェクトでpostgresqlrake db:test:prepareを実行すると、同じ問題に直面しました。これは、ユーザーに対するアクセス許可の問題であるというエラーメッセージから明らかです。コンソールから次のnew_userCREATEDBパーミッションを追加しました。

Postgresコンソールにアクセスするには:

$ Sudo -u postgres -i

postgres@Host:~$ psql

そこで:

postgres=# ALTER USER new_user CREATEDB;

今のところ完璧に機能しています。データベースの所有権に別の問題がある可能性があります。このため、次のコマンドでデータベースprivilegesownerを変更できます。

postgres=# GRANT ALL PRIVILEGES ON  DATABASE database_name to new_user;
postgres=# ALTER DATABASE database_name owner to new_user;
85
Rokibul Hasan

スキーマを見ると、開発とテストの資格情報が異なります。

おそらく、スキーマからユーザー名とパスワードを削除して、テストデータベースが作成されたことを確認してください。

0
fivetwentysix