web-dev-qa-db-fra.com

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 séparer de mes autres Rails.

Pour une raison quelconque, lorsque j'essaie de migrer la base de données pour la première fois, rake ne parvient pas à trouver l'utilisateur postgres. Je reçois l'erreur

 FATAL:  role "postgres" does not exist

J'ai pgAdmin pour que je puisse clairement voir qu'il y a un utilisateur postgres dans la base de données - le compte administrateur en fait -, donc je ne sais pas quoi faire d'autre.

J'ai lu quelque part que des personnes rencontraient des problèmes avec PostgreSQL en raison du chemin d'installation dans lequel il était installé, mais je ne pense pas que j'aurais pu aller aussi loin si la base de données n'avait pas été trouvée.

103
Adam

Ce message apparaît lorsque l'utilisateur de la base de données n'existe pas. Comparez le manuel ici .
Multiple local bases de données ne peut pas être l'explication. Les rôles sont valides à l'échelle du cluster. Le manuel encore :

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

Vous devez vous retrouver dans un autre cluster de bases de données . Ce serait un autre serveur fonctionnant sur le même ordinateur, écoutant un port différent. Ou, plus probablement, sur une autre machine.

Serait-ce que le message vient en fait du serveur distant?

12
Erwin Brandstetter

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 comme PostgreSQL: maintient les autorisations de la 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 une mince wrapper autour des commandes CREATE USER, CREATE ROLE, etc.

252
Chris Sherlock

Récemment, j'ai eu ce problème immédiatement après l'installation de Postgres. S'il arrive immédiatement après l'installation, il se peut que l'utilisateur par défaut, postgres, soit manquant. Dans ce cas, vous pouvez créer postgres par défaut à l'aide de 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 de rôle et le mot de passe de base de données requis. Une fois le processus terminé, vous pouvez vous connecter à la console postgres à l'aide de 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
Prem

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, lancez 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 (indicateur -s) en se connectant en tant que postgres (--username = indicateur postgres).

Je vois que votre question a reçu une réponse, mais je souhaite l’ajouter aux personnes qui utilisent OSX et qui tentent d’installer PostgreSQL 9.2.4.

22
Jack

J'ai rencontré ce problème dès la première installation du logiciel POSTGRES.app de Heroku. Après une matinée d'essai et d'erreur, je pense que cette ligne de code a résolu le problème. Comme décrit précédemment, cela est dû au fait que postgresql n'a pas de rôle par défaut lors de sa première configuration. Et nous devons définir cela.

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 d'autorisation, vous devez modifier avec la commande:

sovanlandy=# ALTER ROLE postgres LOGIN;

J'espère que ça aide!

10
sovanlandy

Dans la documentation Heroku; Pour commencer whit Rails 4, ils disent:

Vous devrez également supprimer le champ nom d'utilisateur de votre database.yml s'il en existe un: Dans le fichier config/database.yml, supprimez: nom d'utilisateur: myapp

Ensuite, vous supprimez simplement cette ligne dans "development:", sinon, pg indique à 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écutée sous un rôle de myapp. Comme vous n'avez probablement pas ce rôle dans votre base de données, nous le supprimerons. Avec la ligne remove Rails essaiera d’accéder à la base de données en tant qu’utilisateur actuellement connecté à l’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
Yunrock

Pourriez-vous avoir plusieurs bases de données locales? Vérifier votre database.yml et assurez-vous que vous frappez la pd db que vous voulez. Utilisation Rails console confirmer.

2
Jonathan Julian

Dans la commande utilisateur local Ubuntu Invite, mais pas l'utilisateur root, tapez

Sudo -u postgres createuser nom d'utilisateur

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

Entrez le mot de passe pour le nom d'utilisateur.

Puis entrez à nouveau la commande pour laquelle le rôle généré n'existe pas.

1
Robert Cambil

Ma réponse était beaucoup plus simple. Je suis juste allé dans le dossier db et j'ai supprimé la colonne id, que j'avais essayé de créer avec force, mais qui est en fait créée automatiquement. J'ai également supprimé le nom d'utilisateur dans le fichier database.yml (sous le dossier config).

1
maudulus

Vous pourrez peut-être contourner ce problème en exécutant initdb -U postgres -D /path/to/data ou en l'exécutant en tant qu'utilisateur postgres, étant donné qu'il est défini par défaut sur l'utilisateur actuel. GL!

0
rogerdpack

Je me suis retrouvé ici après avoir tenté de suivre le tutoriel de Ryan Bate sur le déploiement vers AWS EC2 avec caoutchouc. Voici ce qui m'est arrivé: nous avons créé une nouvelle application en utilisant "

Rails new blog -d postgresql

Evidemment, 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 change le fichier database.yml. La valeur par défaut du nom d'utilisateur lors de la génération du fichier est 'appname'. Cependant, il est fort probable que votre rôle d'administrateur postgresql soit différent (du moins c'était pour moi). Je l'ai changé en mon nom (voir ci-dessus le conseil sur la création d'un nom de rôle) et j'étais prêt à partir.

J'espère que cela t'aides.

0
Andrew Shenstone

Après quelques tâches d’installation et de désinstallation de Postgres, voici ce qui semble fonctionner régulièrement pour moi avec Os X Mavericks, Rails 4 et Ruby 2.

  1. Dans le fichier database.yml, je remplace les noms d'utilisateur par défaut par le nom d'utilisateur de mon ordinateur, qui est pour moi simplement "admin".

  2. Dans la ligne de commande, je lance rake db: create: all

  3. Ensuite, je lance rake db: migrate

  4. Lorsque j'exécute le serveur Rails et que je vérifie l'hôte local, le message "Bienvenue à bord".

0