web-dev-qa-db-fra.com

Le rôle n'existe pas et ne peut pas créer de base de données lors de l'utilisation de PostgreSQL

J'utilise Heroku pour mon application et cela nécessite PostgreSQL mais vous pouvez toujours utiliser SQLite3 pour le développement. Comme Heroku déconseille fortement d'avoir 2 bases de données différentes, j'ai décidé de passer à PostgreSQL pour le développement. J'ai installé le gem pg et est également allé sur le site officiel de PostgreSQL pour obtenir le programme d'installation de Windows et a également changé mon database.yml. Lors de l'installation, il nécessite un mot de passe pour PostgreSQL, j'en ai donc créé un. J'ai dû changer le pg_hba.conf fichier à partir de md5 à trust pour passer: fe_sendauth: no password supplied lorsque vous essayez de créer la base de données.

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# IPv4 local connections:
Host    all             all             127.0.0.1/32            trust # was md5
# IPv6 local connections:
Host    all             all             ::1/128                 trust # was md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
#Host    replication     postgres        127.0.0.1/32            trust
#Host    replication     postgres        ::1/128                 trust

Après m'être débarrassé de cela, je comprends maintenant ceci:

$ rake db:create
(in C:/app)
FATAL:  role "User" does not exist 
Couldn't create database for {"adapter"=>"postgresql", "encoding"=>"utf8", 
"database"=>"app_test", "pool"=>5, "username"=>nil, "password"=>nil} 

J'ai toujours mon development.sqlite3 et text.sqlite3 présent, cela pourrait-il être le problème? Que faut-il faire?

Voici mon Gist complet: https://Gist.github.com/1522188

59
LearningRoR

Ajoutez un nom d'utilisateur à votre database.yml, pourrait tout aussi bien utiliser le nom de votre application (ou une variante du nom) comme nom d'utilisateur, j'utiliserai app_name comme espace réservé:

development:
  adapter: postgresql
  encoding: utf8
  database: app_development
  pool: 5
  username: app_name
  password:

Créez ensuite l'utilisateur (AKA "rôle") dans PostgreSQL en utilisant psql.exe:

$ psql -d postgres
postgres=# create role app_name login createdb;
postgres=# \q

La première ligne est dans votre terminal, les deux suivantes sont à l'intérieur de psql. Faites ensuite votre rake db:create.

L'utilisateur User est peut-être un utilisateur par défaut mais user est déjà utilisé à d'autres fins dans PostgreSQL, vous devrez donc le citer pour conserver la casse si vous le souhaitez utilisez User comme nom d'utilisateur:

postgres=# create role "User" login createdb;

Vous feriez mieux de créer un utilisateur par application de toute façon.

Vous voudrez faire des choses similaires pour votre entrée test dans database.yml ainsi que.

130
mu is too short

PostgreSQL essaiera de créer la base de données avec votre nom de compte (login) si un username n'est pas spécifié dans votre config/database.yml. Sous OS X et Linux, vous pouvez voir qui c'est avec whoami. On dirait que vous utilisez Windows.

Solution A: Créer un utilisateur PostgreSQL qui correspond à celui qu'il recherche. Par exemple

createuser --superuser some_user

Solution B: Modifiez l'utilisateur DB en définissant explicitement un nom d'utilisateur comme indiqué dans la réponse de m .

7
Dennis

Si vous avez un compte/utilisateur spécifique sur votre machine pour postgres appelé postgres par exemple.

Ensuite, l'exécution de cette commande vous invitera à entrer un nom de rôle.

Sudo -u postgres createuser --interactive

Puis faire

rake db:create

Devrait marcher!

6
Ishan Kanade