it-swarm.com.de

Postgres-Berechtigung zum Erstellen einer Datenbank auf rake db: create: all verweigert

Ich versuche Postgres-Datenbanken für Entwicklung und Tests zu erstellen. 

Ich benutze...

  • OSX Yosemite
  • Schienenversion: 4.2.0
  • git-Version: 2.2.2
  • pSQL-Version: 9.4.0
  • Ruby-Version: 2.1.0p0
  • HomeBrew-Version: 0.9.5

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 thatmyapp_development` bereits gibt. 

  • Warum kann es nicht den anderen Benutzernamen verwenden, den ich erstellt und CREATEDB zugewiesen hat?
  • Warum hat es gesagt, dass die Entwicklung nicht erstellt werden konnte, dann sagen Sie mir, dass es bereits existiert 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.

28
Beengie

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;
76
Rokibul Hasan

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.

0
fivetwentysix