web-dev-qa-db-fra.com

Autorisation Postgres refusée pour créer une base de données sur la base de données rake: create: all

J'essaie de créer des bases de données postgres pour le développement et les tests. 

J'utilise...

  • OSX Yosemite
  • Version Rails: 4.2.0
  • version git: 2.2.2
  • version psql: 9.4.0
  • Version Ruby: 2.1.0p0
  • Version de 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 renvoie

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

Qu'est-ce qui ne va pas? 

EDIT Je viens d'essayer de changer le nom d'utilisateur dans le fichier database.yml en mon nom d'utilisateur que j'utilise sur mon Mac. Ça a marché. Il m'a également dit que non seulement maybe_test' already exists, but it also just told me thatmyapp_development` existe déjà aussi. 

  • Pourquoi ne pourrait-il pas utiliser l'autre nom d'utilisateur créé et attribué à CREATEDB un rôle?
  • Pourquoi a-t-il dit que le développement ne pouvait pas être créé, puis que je le connaissais déjà?

Tout cela semble trop déroutant et me rappelle la configuration php avec Apache à l'époque très ancienne. Je ne veux pas avoir à gérer des problèmes chaque fois que je crée une nouvelle application et que je tente de suivre les recommandations de heroku pour utiliser postgres également pendant le développement.

28
Beengie

J'ai rencontré les mêmes problèmes lors de l'exécution de rake db:test:prepare dans postgresql sur mon Ruby on Rails project. Cela ressort assez clairement du message d'erreur, que c'est un problème d'autorisation pour l'utilisateur. J'ai ajouté la permission CREATEDB pour new_user comme suit depuis la console.

Pour accéder à la console postgres:

$ Sudo -u postgres -i

postgres@Host:~$ psql

Dans là:

postgres=# ALTER USER new_user CREATEDB;

Cela fonctionne parfaitement pour l'instant. Vous pouvez avoir un autre problème avec la propriété de la base de données. Pour cela, vous pouvez modifier la base de données privileges et owner comme commande suivante.

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

En regardant votre schéma, vos informations d'identification pour le développement et le test sont différentes.

Supprimez peut-être le nom d'utilisateur et le mot de passe du schéma, car votre base de données de test a bien été créée.

0
fivetwentysix