2015-01-23 10 views
25

Ich versuche, Postgres-Datenbanken für Entwicklung und Tests zu erstellen.Postgres-Berechtigung verweigert, Datenbank auf Rake zu erstellen db: create: all

Ich verwende ...

  • OSX Yosemite
  • Rails-Version: 4.2.0
  • git Version: 2.2.2
  • psql Version: 9.4.0
  • Rubin Version: 2.1.0p0
  • HomeBrew Version: 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 kehrt

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?

BEARBEITEN Ich habe gerade versucht, den Benutzernamen in der Datenbank.yml zu meinem Benutzernamen, den ich auf meinem Mac verwende. Es funktionierte. Es sagte mir auch, dass nicht nur maybe_test' already exists, but it also just told me that myapp_development bereits existiert.

  • Warum konnte es nicht den anderen Benutzernamen verwenden, den ich erstellt und eine Rolle an CREATEDB zugewiesen hatte?
  • Warum hat es gesagt, dass die Entwicklung nicht erstellt werden konnte, dann sagen Sie mir, dass es schon existierte?
  • Das alles scheint viel zu verwirrend und erinnert mich an PHP-Setup mit Apache zurück in den alten Tagen. Ich möchte mich nicht jedes Mal mit Problemen herumschlagen müssen, wenn ich eine neue App erstelle und versuche, den Heroku-Empfehlungen zu folgen, um Postgres auch während der Entwicklung zu verwenden.

    +1

    'rake db: drop: all' dann' rake db: create: all' –

    +4

    Folgen [diese Antwort] (http://dba.stackexchange.com/a/33292/46597) Ihre verwendet geben 'CREATEDB' Rolle. Und dein Problem wird gelöst werden. Und tun 'Rake db: drop' und' rake db: create'. –

    Antwort

    0

    Mit Blick auf Ihr Schema sind Ihre Anmeldeinformationen für Entwicklung und Test unterschiedlich.

    Vielleicht entfernen Sie Benutzername und Passwort aus dem Schema, sehen, dass Ihre Test-Datenbank erstellt wurde.

    +0

    Rails hat diese 'default'-Variable erstellt, die alles weiterleitet, bis sie explizit überschrieben wird. Der Benutzername und das Passwort werden also auch an die Datenbank 'myapp_test' übergeben. – Beengie

    59

    Ich habe die gleichen Probleme beim Ausführen rake db:test:prepare in postgresql auf meinem Ruby on Rails Projekt konfrontiert. Das ist ziemlich klar aus der Fehlermeldung, dass es ein Berechtigungsproblem für den Benutzer ist. Ich fügte CREATEDB Erlaubnis für new_user wie folgend von der Konsole hinzu.

    Um den Zugriff Postgres Konsole:

    $ sudo -u postgres -i 
    
    [email protected]:~$ psql 
    

    Da drin:

    postgres=# ALTER USER new_user CREATEDB; 
    

    Es funktioniert jetzt perfekt.Möglicherweise haben Sie weitere Probleme mit der Datenbankeigentümerschaft. Hierzu 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; 
    
    +0

    Vielen Dank. –

    +0

    Sie sind herzlich willkommen @vidurpunj –

    Verwandte Themen