J'essaie de créer des bases de données postgres pour le développement et les tests.
J'utilise...
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 that
myapp_development` existe déjà aussi.
CREATEDB
un rôle?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.
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;
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.