Rails et PostgreSQL: le rôle postgres n'existe pas

J'ai installé PostgreSQL sur mon Mac OS Lion, et je travaille sur une application rails. J'utilise RVM pour garder tout séparé de mes autres applications Rails.

Pour quelque raison que quand j'essaie de migrer la base de données pour la première fois râteau ne peut pas trouver l'utilisateur postgres. Je reçois l'erreur

 FATAL:  role "postgres" does not exist

J'ai pgAdmin donc je peux clairement voir qu'il y a un utilisateur postgres dans la base de données-le compte admin en fait-donc je ne suis pas sûr de quoi faire d'autre.

J'ai lu quelque part sur les gens ayant des problèmes avec PostgreSQL à cause du chemin dans lequel il a été installé, mais je ne pense pas que j'aurais pu aller aussi loin s'il n'avait pas pu trouver la base de données.

101
demandé sur Erwin Brandstetter 2011-10-23 05:26:18

12 réponses

Ce message apparaît lorsque l'utilisateur de la base de données n'existe pas. Comparez le manuel ici .
Plusieurs bases de données locales ne peut pas {[7] } être l'explication. Les rôles sont valides à l'échelle du cluster. Le manuel à nouveau :

Notez que les rôles sont définis au niveau du cluster de base valide dans toutes les bases de données du cluster.

Vous devez vous retrouver dans un autre database-cluster . Ce serait un autre serveur fonctionnant sur le même machine, en écoutant un port différent. Ou, plus probablement, sur une machine différente.

Se pourrait-il que le message Vienne, en fait, du serveur distant?

11
répondu Erwin Brandstetter 2011-10-23 05:09:17

En fait, pour une raison inconnue, j'ai trouvé que le problème était en fait parce que le rôle postgresql n'avait pas été créé.

Essayez d'exécuter:

createuser -s -r postgres

Notez que les rôles sont la manière dont PostgreSQL maintient les autorisations de base de données . S'il n'y a pas de rôle pour l'utilisateur postgres, il ne peut accéder à rien. La commande createuser est un wrapper mince autour des commandes CREATE USER, CREATE ROLE,etc.

241
répondu Chris Sherlock 2012-12-26 12:09:47

Récemment, j'ai eu ce problème immédiatement après l'installation de postgres. Si elle vient immédiatement après l'installation, vous pourriez manquer l'utilisateur par défaut, postgres. Dans ce cas, vous pouvez créer des postgres utilisateur par défaut en utilisant la commande ci-dessous.

Createuser-s-U $ USER

Ex: createuser -s -U $USER
enter your required role name: postgres
enter password for your the user: 

Il vous demandera d'entrer le nom et le mot de passe du rôle de base de données requis Une fois le processus terminé, vous pouvez vous connecter à la console postgres en utilisant la commande ci-dessous

psql -U 'your_database_name'

Ex: psql-U postgres
Ici, vous devez entrer le mot de passe si vous en avez donné, lors de la création de l'utilisateur.

J'espère que ça aide:)

26
répondu Prem 2012-12-05 05:02:29

J'étais sur OSX 10.8, et tout ce que j'ai essayé me donnerait le FATAL: role "USER" does not exist. Comme beaucoup de gens l'ont dit ici, exécutez createuser -s USER, mais cela m'a donné la même erreur. Cela a finalement fonctionné pour moi:

$ sudo su
# su postgres
# createuser -s --username=postgres MYUSERNAME

Le createuser -s --username=postgres crée un superutilisateur (drapeau-s) en se connectant en tant que postgres (--username=drapeau postgres).

Je vois que votre question a été répondue, mais je veux ajouter cette réponse pour les personnes utilisant OSX essayant d'installer PostgreSQL 9.2.4.

21
répondu Jack 2013-06-16 16:06:49

J'ai rencontré ce problème lors de la première installation des POSTGRES de Heroku.app chose. Après un essai et une erreur du matin, je pense que cette ligne de code a résolu le problème. Comme décrit précédemment, c'est parce que postgresql n'a pas de rôle par défaut la première fois qu'il est configuré. Et nous avons besoin que.

sovanlandy=# CREATE ROLE postgres LOGIN;

Vous devez Vous connecter à votre psql console pour utiliser cette commande psql.

A également noté que, si vous avez déjà créé le rôle 'postgre' mais que vous obtenez toujours des erreurs d'autorisation, vous besoin de modifier avec la commande:

sovanlandy=# ALTER ROLE postgres LOGIN;

J'espère que ça aide!

9
répondu sovanlandy 2013-02-25 03:31:47

Dans la documentation Heroku; mise en route avec rails 4, Ils disent:

Vous devrez également supprimer le champ Nom d'utilisateur dans votre base de données.yml s'il y en a un donc: dans le fichier config / base de données.YML supprimer: nom d'utilisateur: myapp

Ensuite, vous supprimez simplement cette ligne dans " development:", si vous ne le faites pas PG dit à la base de données qui fonctionne sous le rôle "myapp"

Cette ligne indique à rails que la base de données myapp_development doit être exécuter sous un rôle de myapp. Depuis vous n'avez probablement pas ce rôle dans votre base de données nous allons la supprimer. Avec la ligne remove Rails va essayer pour accéder à la base de données en tant qu'utilisateur ordinateur.

Pensez Également à créer la base de données pour le développement:

$createdb myapp_development

Repleace "myapp" pour le nom de votre application

4
répondu Yunrock 2013-11-21 07:15:41

Pourriez-vous avoir plusieurs bases de données locales? Vérifiez votre database.yml et assurez-vous que vous frappez la base de données pg que vous voulez. Utilisez rails console pour confirmer.

2
répondu Jonathan Julian 2011-10-23 04:35:54

Dans L'invite de commande de L'utilisateur local Ubuntu, mais pas l'utilisateur root, tapez

Sudo-U postgres createuser nom d'utilisateur

Nom d'Utilisateur ci-dessus doit correspondre au nom indiqué dans le message "FATAL: rôle 'nom d'utilisateur' n'existe pas."

Saisissez le mot de passe du nom d'utilisateur.

Puis entrez à nouveau la commande qui a généré le rôle n'existe pas message.

1
répondu Robert Cambil 2015-06-21 20:51:38

Je me suis retrouvé ici après avoir tenté de suivre le tutoriel de Ryan Bate sur le déploiement sur AWS EC2 avec rubber. Voici ce qui s'est passé pour moi: Nous avons créé une nouvelle application en utilisant "

rails new blog -d postgresql

Obviosuly cela crée une nouvelle application avec pg comme base de données, mais la base de données n'a pas encore été créée. Avec sqlite, vous exécutez simplement rake db: migrate, mais avec pg, vous devez d'abord créer la base de données pg. Ryan n'a pas fait cette étape. La commande est rake db:create:all, alors nous pouvons exécuter rake db:migrate

La deuxième partie est en train de changer la base de données.fichier yml. La valeur par défaut pour le nom d'utilisateur lorsque le fichier est généré est 'nom'. Cependant, il y a des chances que votre rôle pour l'administrateur postgresql soit différent (du moins c'était pour moi). Je l'ai changé pour mon nom (voir ci-dessus des conseils sur la création d'un nom de rôle) et j'étais prêt à partir.

J'espère que cela aide.

0
répondu Andrew Shenstone 2013-10-21 21:47:50

Après un tas d'installation et de désinstallation de Postgres, voici ce qui semble maintenant fonctionner de manière cohérente pour moi avec Os X Mavericks, Rails 4 et Ruby 2.

  1. Dans la base de données.fichier yml, je change les noms d'utilisateur par défaut pour le nom d'utilisateur de mon ordinateur qui pour moi est juste "admin".

  2. Dans la ligne de commande j'ai lancer rake db:create:tous les

  3. Ensuite, je lance rake db: migrate

  4. Lorsque je lance le serveur rails et vérifie l'hôte local, il est dit " Bienvenue à bord".

0
répondu Michael van Holst 2013-11-06 19:34:06

Ma réponse était beaucoup plus simple. Juste allé dans le dossier db et supprimé la colonne id, que j'avais essayé de créer avec force, mais qui est réellement créée automagiquement. J'ai également supprimé le nom D'utilisateur dans la base de données.fichier yml (sous le dossier config).

0
répondu maudulus 2014-03-18 12:43:00

Vous pouvez contourner ce problème en exécutant initdb -U postgres -D /path/to/data ou en l'exécutant en tant qu'utilisateur postgres, car il est par défaut l'utilisateur actuel. GL!

0
répondu rogerdpack 2014-10-09 17:33:13