111 votes

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 tout garder séparé de mes autres applications Rails.

Pour une raison quelconque, lorsque j'essaie de migrer la base de données pour la première fois, rake ne peut pas trouver l'utilisateur postgres. J'obtiens l'erreur suivante

 FATAL:  role "postgres" does not exist

J'ai pgAdmin et 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 sais pas quoi faire d'autre.

J'ai lu quelque part que des gens avaient des problèmes avec PostgreSQL à cause du chemin dans lequel il était 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.

0 votes

Pour le problème étroitement lié où l'utilisateur (= rôle) de la base de données postgres n'a pas été créé, ce qui peut conduire au même message d'erreur, voir cette question connexe : stackoverflow.com/questions/11919391/

278voto

Chris Sherlock Points 1308

En fait, pour une raison inconnue, j'ai découvert que le problème était dû au fait que le rôle postgresql n'avait pas été créé.

Essayez de courir :

createuser -s -r postgres

Notez que les rôles sont la façon dont PostgreSQL maintient les autorisations de la base de données . Si l'utilisateur postgres n'a pas de rôle, il ne peut accéder à rien. La commande createuser est une mince emballage autour des commandes CREATE USER, CREATE ROLE, etc.

8 votes

J'ai dû utiliser sudo su - postgres avant que cette commande ne fonctionne pour moi. Merci !

2 votes

Je ne sais pas comment mon installation s'est faite mais j'avais créé postgresql sans utilisateur et rôle postgres, myUser comme seul utilisateur, mais il a refusé de me laisser entrer sous prétexte que la base de données nommée myUser était inexistante ! cela a démêlé une partie de la pagaille !

0 votes

@StuartNelson : Cela semble être la solution à un problème courant ( même ici ). Mais c'est évidemment pas la réponse à cette question. Le PO indique clairement que le rôle existait dans sa BD.

28voto

prem Points 1499

Récemment, j'ai eu ce problème immédiatement après l'installation de Postgres. Si le problème survient immédiatement après l'installation, il se peut qu'il vous manque l'utilisateur par défaut, postgres. Dans ce cas, vous pouvez créer l'utilisateur par défaut postgres 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 du rôle de la base de données et le mot de passe requis. Une fois que vous avez terminé le processus, vous pouvez vous connecter à la console postgres en utilisant la commande suivante

psql -U 'your_database_name'

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

J'espère que cela vous aidera :)

22voto

Jack Points 816

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

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

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

Je vois que votre question a reçu une réponse, mais je veux ajouter cette réponse pour les personnes utilisant OSX qui essaient d'installer PostgreSQL 9.2.4.

2 votes

Vous pouvez raccourcir les deux premières lignes en sudo su postgres .

0 votes

C'était aussi la solution pour moi sur ubuntu, n'oubliez pas de mettre à jour votre database.yml pour utiliser le même nom d'utilisateur que ci-dessus.

13voto

Erwin Brandstetter Points 110228

Ce message s'affiche lorsque l'utilisateur de la base de données n'existe pas. Comparez le manuel ici .
Plusieurs locaux bases de données ne peut pas être l'explication. Les rôles sont valables dans toute la grappe. Le site manuel à nouveau :

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

Vous devez finir dans un autre cluster de base de données . Il s'agirait d'un autre serveur fonctionnant sur la même machine, mais écoutant sur un port différent. Ou, plus probablement, sur une autre machine.

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

0 votes

C'était ça - J'ai eu des difficultés à faire fonctionner postgresql pendant un certain temps, alors j'ai fait une nouvelle installation et je dois avoir une ou deux instances ici maintenant. J'ai changé le port dans le fichier database.yml et tout s'est bien passé. Merci pour votre aide !

0 votes

N'a pas fonctionné même après avoir nettoyé toutes les images - docker rmi $(docker images -q) --force . mais le problème était sur volumes Je suppose

10voto

sovanlandy Points 562

J'ai rencontré ce problème dès la première installation de POSTGRES.app de Heroku. Après une matinée d'essais et d'erreurs, je pense que cette seule 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 devons le définir.

sovanlandy=# CREATE ROLE postgres LOGIN;

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

Notez également que, si vous avez déjà créé le rôle 'postgre' mais que vous obtenez toujours des erreurs de permission, vous devez modifier la commande :

sovanlandy=# ALTER ROLE postgres LOGIN;

J'espère que cela vous aidera !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X