531 votes

Psql: FATAL: le rôle "postgres" n'existe pas

Je suis novice en postgres.

J'ai installé l'application postgres.app pour mac. J'ai joué avec les commandes psql et j'ai accidentellement supprimé la base de données postgres. Je ne sais pas ce qu'il y avait dedans.

Je suis actuellement en train de suivre un tutoriel : http://www.rosslaird.com/blog/building-a-project-with-mezzanine/

Et je suis bloqué à sudo -u postgres psql postgres

MESSAGE D'ERREUR : psql: FATAL: le rôle "postgres" n'existe pas

$ which psql

/Applications/Postgres.app/Contents/MacOS/bin/psql

C'est ce qui s'affiche avec psql -l

                                Liste des bases de données
    Nom    |   Propriétaire    | Encodage | Collation | Type_C |     Privilèges d'accès     
------------+------------+----------+---------+-------+---------------------------
 utilisateur       | utilisateur       | UTF8     | en_US   | en_US | 
 template0  | utilisateur       | UTF8     | en_US   | en_US | =c/utilisateur                  +
            |            |          |         |       | utilisateur      =CTc/utilisateur      
 template1  | utilisateur       | UTF8     | en_US   | en_US | =c/utilisateur                  +
            |            |          |         |       | utilisateur      =CTc/utilisateur      
(3 lignes)

Donc, quelles sont les étapes à suivre ? Supprimer tout ce qui est lié à psql et tout réinstaller ?

Merci pour l'aide les gars !

1 votes

Redémarrage de l'ordinateur. Assurez-vous que Launchd de brew services start postresql est exécuté.

525voto

A.H. Points 23369

REMARQUE : Si vous avez installé postgres en utilisant homebrew, consultez les commentaires de @user3402754 et @originalhat ci-dessous.

Notez que le message d'erreur ne parle PAS d'une base de données manquante, il parle d'un rôle manquant. Plus tard dans le processus de connexion, il pourrait également rencontrer des problèmes liés à la base de données manquante.

Mais la première étape est de vérifier le rôle manquant : Quel est le résultat de la commande \du dans psql ? Sur mon système Ubuntu, la ligne pertinente ressemble à ceci :

                              Liste des rôles
 Nom du rôle |           Attributs             | Membre de 
-----------+-----------------------------------+-----------
 postgre   | Superutilisateur, Créer un rôle, Créer une BD | {}        

S'il n'y a pas au moins un rôle avec superutilisateur, alors vous avez un problème :-)

S'il y en a un, vous pouvez l'utiliser pour vous connecter. Et en regardant la sortie de votre commande \l : Les autorisations pour utilisateur sur les bases de données template0 et template1 sont les mêmes que sur mon système Ubuntu pour le superutilisateur postgre. Donc je pense que votre configuration utilise simplement utilisateur comme superutilisateur. Vous pouvez donc essayer cette commande pour vous connecter :

sudo -u utilisateur psql utilisateur

Si utilisateur est vraiment le superutilisateur de la base de données, vous pouvez créer un autre superutilisateur de base de données et une base de données privée et vide pour lui :

CREATE USER postgre SUPERUSER;
CREATE DATABASE postgre WITH OWNER postgre;

Mais étant donné que votre configuration postgres.app ne semble pas le faire, vous ne devriez pas le faire non plus. Adaptez simplement le tutoriel.

11 votes

Pour moi, l'utilisateur n'a pas été créé - cela a fonctionné à la place CREATE USER postgres WITH SUPERUSER PASSWORD 'password'; j'utilise postgres v10.

450 votes

Si vous avez installé Postgres avec homebrew, vous devez exécuter /usr/local/opt/postgres/bin/createuser -s postgres dans votre terminal.

16 votes

J'ai dû exécuter /usr/local/opt/postgresql/bin/createuser -s postgres

279voto

jwd630 Points 489

La clé est "J'ai installé l'application postgres.app pour Mac." Cette application configure l'installation locale de PostgreSQL avec un superutilisateur de base de données dont le nom de rôle est le même que votre nom de connexion (court).

Lorsque Postgres.app démarre pour la première fois, il crée la base de données $USER, qui est la base de données par défaut pour psql lorsqu'aucune n'est spécifiée. L'utilisateur par défaut est $USER, sans mot de passe.

Certains scripts (par exemple, une sauvegarde de base de données créée avec pgdump sur un système Linux) et tutoriels supposeront que le superutilisateur a le nom de rôle traditionnel de postgres.

Vous pouvez rendre votre installation locale un peu plus traditionnelle et éviter ces problèmes en faisant une fois :

/Applications/Postgres.app/Contents/Versions/9.*/bin/createuser -s postgres

ce qui fera disparaître ces FATAL: le rôle "postgres" n'existe pas.

0 votes

Je viens juste de faire une installation propre de Mac OS X Mavericks. J'utilise Postgres.app et Navicat pour une GUI pour naviguer dans les bases de données. Je recevais l'erreur fatale "le rôle n'existe pas". Votre conseil a complètement résolu le problème. Migraine évitée. +2 pour vous! Merci.

136 votes

Si vous utilisez postgres depuis Homebrew, alors vous voulez /usr/local/Cellar/postgresql/9.2.4/bin/createuser -s postgres (pour la version 9.2.4, évidemment).

1 votes

Pour postgres.app 9.3, ils semblent avoir réorganisé les répertoires. J'ai essayé: /Applications/Postgres.app/Contents/Versions/9.3/bin/createuser -s postgres, mais cela a généré le même message d'erreur : "createuser: could not connect to database postgres: FATAL: role "postgres" does not exist"

272voto

Nitin Points 89

Pour MAC:

  1. Installer Homebrew
  2. brew install postgres
  3. initdb /usr/local/var/postgres
  4. /usr/local/Cellar/postgresql//bin/createuser -s postgres ou /usr/local/opt/postgres/bin/createuser -s postgres qui utilisera simplement la dernière version.
  5. Démarrer le serveur postgres manuellement: pg_ctl -D /usr/local/var/postgres start

Pour démarrer le serveur au démarrage

  • mkdir -p ~/Library/LaunchAgents
  • ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents
  • launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

Maintenant, c'est configuré, connectez-vous en utilisant psql -U postgres -h localhost ou utilisez PgAdmin pour GUI.

Par défaut, l'utilisateur postgres n'aura pas de mot de passe de connexion.

Consultez ce site pour plus d'articles comme celui-ci: https://medium.com/@Nithanaroy/installing-postgres-on-mac-18f017c5d3f7

4 votes

Avec la nouvelle installation de brew, vous pouvez utiliser brew services start postgresql pour démarrer postgres

0 votes

L'étape 4 pourrait être /usr/local/opt/postgresql@/bin/createuser -s postgres

63voto

SubstanceMX Points 21
createuser postgres --interactive

ou créez un superutilisateur postgres juste avec

createuser postgres -s

0 votes

0 votes

J'ai trouvé cette réponse utile lorsque mon pgadmin ne cessait de demander l'utilisateur postgres et que je n'avais pas le rôle postgres pour commencer, cette commande l'a créé, j'ai ajouté le mot de passe généré automatiquement dans mon pgadmin et le problème a été résolu !

0 votes

Cela fonctionne pour moi.. mais de cette manière : "create user postgres"

44voto

Igal Points 836

Cela se produit lorsque vous exécutez initdb avec un utilisateur dont l'ID n'est pas postgres, sans spécifier le nom d'utilisateur postgres avec --username=postgres ou -U postgres.

Le cluster de base de données est alors créé avec le compte utilisateur du système que vous avez utilisé pour exécuter initdb, et il obtient des autorisations de superutilisateur.

Pour corriger cela, créez simplement un nouvel utilisateur nommé postgres avec l'option --superuser en utilisant l'utilitaire createuser fourni avec Postgres. L'utilitaire se trouve dans le répertoire bin de Postgres. e.g.

createuser --superuser postgres

Si vous avez un nom d'hôte ou un port personnalisé, assurez-vous de définir les options appropriées.

N'oubliez pas de supprimer l'autre compte utilisateur qui a été créé pour vous par initdb.

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