開発とテスト用にpostgresデータベースを作成しようとしています。
私は使用しています...
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 that
myapp_development`もすでに存在します。
CREATEDB
にロールを割り当てた他のユーザー名を使用できないのはなぜですか?これは非常に混乱しすぎているようで、非常に昔のApacheでのPHPセットアップを思い出させます。新しいアプリを作成するたびに問題に対処する必要はありません。また、開発中にもpostgresを使用するためにherokuの推奨事項に従ってください。
Ruby on Railsプロジェクトでpostgresql
でrake db:test:prepare
を実行すると、同じ問題に直面しました。これは、ユーザーに対するアクセス許可の問題であるというエラーメッセージから明らかです。コンソールから次のnew_user
にCREATEDB
パーミッションを追加しました。
Postgresコンソールにアクセスするには:
$ Sudo -u postgres -i
postgres@Host:~$ psql
そこで:
postgres=# ALTER USER new_user CREATEDB;
今のところ完璧に機能しています。データベースの所有権に別の問題がある可能性があります。このため、次のコマンドでデータベースprivileges
とowner
を変更できます。
postgres=# GRANT ALL PRIVILEGES ON DATABASE database_name to new_user;
postgres=# ALTER DATABASE database_name owner to new_user;
スキーマを見ると、開発とテストの資格情報が異なります。
おそらく、スキーマからユーザー名とパスワードを削除して、テストデータベースが作成されたことを確認してください。