Ich versuche Postgres-Datenbanken für Entwicklung und Tests zu erstellen.
Ich benutze...
Gemfile ...
gem 'pg'
datenbank.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
kehrt zurück
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
Was ist falsch?
EDIT Ich habe gerade versucht, den Benutzernamen in der database.yml in meinen Benutzernamen zu ändern, den ich auf meinem Mac verwende. Es funktionierte. Es sagte mir auch, dass es nicht nur maybe_test' already exists, but it also just told me that
myapp_development` bereits gibt.
CREATEDB
zugewiesen hat?All dies scheint viel zu verwirrend zu sein und erinnert mich an PHP-Setup mit Apache in alten Zeiten. Ich möchte nicht jedes Mal Probleme haben, wenn ich eine neue App erstelle und versuche, den Heroku-Empfehlungen zu folgen und Postgres auch während der Entwicklung zu verwenden.
Bei der Ausführung von rake db:test:prepare
in postgresql
in meinem Ruby on Rails -Projekt habe ich dieselben Probleme. Aus der Fehlermeldung wird deutlich, dass es sich um ein Berechtigungsproblem für den Benutzer handelt. Ich habe die CREATEDB
-Berechtigung für new_user
wie folgt von der Konsole aus hinzugefügt.
So greifen Sie auf die Postgres-Konsole zu:
$ Sudo -u postgres -i
[email protected]:~$ psql
Da drin:
postgres=# ALTER USER new_user CREATEDB;
Es funktioniert jetzt perfekt. Möglicherweise haben Sie andere Probleme mit dem Besitz der Datenbank. Dazu können Sie die Datenbank privileges
und owner
wie folgt ändern.
postgres=# GRANT ALL PRIVILEGES ON DATABASE database_name to new_user;
postgres=# ALTER DATABASE database_name owner to new_user;
Wenn Sie Ihr Schema betrachten, unterscheiden sich Ihre Berechtigungen für die Entwicklung und den Test.
Entfernen Sie möglicherweise den Benutzernamen und das Kennwort aus dem Schema, und stellen Sie sicher, dass Ihre Testdatenbank erstellt wurde.