web-dev-qa-db-fra.com

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

Je suis un novice postgres.

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

Je travaille actuellement sur un tutoriel: http://www.rosslaird.com/blog/building-a-project-with-mezzanine/

Et je suis coincé à Sudo -u postgres psql postgres

MESSAGE D'ERREUR: psql: FATAL: role "postgres" does not exist

$ quel psql

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

C’est ce qui est imprimé en psql -l

                                List of databases
    Name    |   Owner    | Encoding | Collate | Ctype |     Access privileges     
------------+------------+----------+---------+-------+---------------------------
 user       | user       | UTF8     | en_US   | en_US | 
 template0  | user       | UTF8     | en_US   | en_US | =c/user                  +
            |            |          |         |       | user      =CTc/user      
 template1  | user       | UTF8     | en_US   | en_US | =c/user                  +
            |            |          |         |       | user      =CTc/user      
(3 rows)

Alors, quelles sont les étapes à suivre? Supprimer tout ce qui concerne psql et tout réinstaller?

Merci pour l'aide les gars!

315
user805981

REMARQUE: Si vous avez installé postgres en utilisant homebrew, reportez-vous au commentaire de @ user3402754 ci-dessous.

Notez que le message d'erreur NOT parle d'une base de données manquante, il parle d'un rôle manquant. Plus tard dans la procédure de connexion, il pourrait également tomber sur la base de données manquante.

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

                              List of roles
 Role name |            Attributes             | Member of 
-----------+-----------------------------------+-----------
 postgres  | Superuser, Create role, Create DB | {}        

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

S'il y en a un, vous pouvez l'utiliser pour vous connecter. Et en regardant le résultat de votre commande \l: Les autorisations pour user sur les bases de données template0 et template1 sont les mêmes que sur mon système Ubuntu pour le superutilisateur postgres. Je pense donc que votre configuration simple utilise user en tant que superutilisateur. Vous pouvez donc essayer cette commande pour vous connecter:

Sudo -u user psql user

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

CREATE USER postgres SUPERUSER;
CREATE DATABASE postgres WITH OWNER postgres;

Mais puisque votre configuration de postgres.app ne semble pas faire cela, vous ne devriez pas non plus. Simple adapter le tutoriel.

311
A.H.

La clé est "J'ai installé le 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 identique à votre nom de connexion (nom abrégé).

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 si 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 des didacticiels supposent que le super-utilisateur porte le nom de rôle traditionnel postgres.

Vous pouvez rendre votre installation locale un peu plus traditionnelle et éviter ces problèmes en effectuant une opération unique:

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

qui fera que ceux FATAL: le rôle "postgres" n’existe pas disparaissent.

248
jwd630

Pour Mac:

  1. Installer Homebrew
  2. brew install postgres
  3. initdb /usr/local/var/postgres
  4. /usr/local/Cellar/postgresql/<version>/bin/createuser -s postgres ou /usr/local/opt/postgres/bin/createuser -s postgres qui utilisera simplement la dernière version.
  5. démarrez 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 avec psql -U postgres -h localhost ou utilisez PgAdmin pour l'interface graphique.

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

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

197
Nitin
createuser postgres --interactive

ou faire un post-utilisateur de superutilisateur juste avec

createuser postgres -s
31
SyntheticMeshwork

Pour moi, ce code a fonctionné:

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

ça venait d'ici: http://talk.growstuff.org/t/fatal-role-postgres-does-not-exist/216/4

16
Kevin Zhao

Tout d'abord vous devez créer un utilisateur:

Sudo -u postgres createuser --superuser $USER

Après vous créez une base de données:

Sudo -u postgres createdb $USER

Changez $USER en votre nom d'utilisateur système.

Vous pouvez voir la solution complète ici .

13
ruzenhack

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 ensuite créé avec le compte d'utilisateur du système que vous avez utilisé pour exécuter initdb et des autorisations de superutilisateur lui sont attribuées.

Pour résoudre ce problème, créez simplement un nouvel utilisateur nommé postgres avec l'option --superuser à l'aide de l'utilitaire createuser fourni avec Postgres. Cet utilitaire se trouve dans le répertoire bin de Postgres. par exemple.

createuser --superuser postgres

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

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

13
isapir

J'avais besoin de désarmer $PGUSER:

$ unset PGUSER
$ createuser -s postgres
11
Beau Barker

Exécuter ceci sur la ligne de commande devrait résoudre le problème

/Applications/Postgres.app/Contents/Versions/9.4/bin/createdb <Mac OSX Username Here>

8
Alex Levine

Pour ce que ça vaut, j’ai Ubuntu et de nombreux paquets installés et il est entré en conflit avec ça.

Pour moi, la bonne réponse était:

Sudo -i -u postgres-xc
psql
4
softwareplay

Supprimer la base de données postgres n'a pas d'importance. Cette base de données est initialement vide et son but est simplement que l'utilisateur postgres puisse se connecter à une sorte de "maison", le cas échéant.

Vous pouvez néanmoins le recréer avec la commande SQL CREATE DATABASE postgres;

Notez que le tutoriel mentionné dans la question n'est pas écrit avec postgres.app à l'esprit. Contrairement à PostgreSQL pour Unix en général, postgres.app essaie de ressembler à une application normale par opposition à un service qui serait exécuté par un utilisateur postgres dédié ayant des privilèges différents de ceux de votre utilisateur normal. postgres.app est exécuté et géré par votre propre compte.

Ainsi, au lieu de cette commande: Sudo -u postgres psql -U postgres, il serait plus dans l’esprit de postgres.app de simplement émettre: psql, qui se connecte automatiquement à une base de données correspondant au nom de vos utilisateurs, et avec un compte db de le même nom qui se trouve être superutilisateur, donc il peut faire quoi que ce soit en termes d'autorisations.

4
Daniel Vérité

C'est le seul qui l'a corrigé pour moi:

createuser -s -U $USER
2
Bax

Sur le système Ubuntu, j'ai purgé PostgreSQL et je l'ai réinstallé. Toutes les bases de données sont restaurées. Cela a résolu le problème pour moi.

Conseil - Faites une sauvegarde des bases de données pour être plus sûr.

1
Gaurav Neema

Je suis resté bloqué sur cette question après avoir exécuté brew services stop postgresql le jour précédent.
Le jour suivant: brew services start postgresql ne fonctionnerait pas. En effet, comme indiqué lors de l'installation à l'aide de homebrew. postgresql utilise un launchd ... qui se charge lorsque votre ordinateur est allumé.

résolution:
brew services start postgresql
Redémarrez votre ordinateur.

0
Michael Dimmitt

La commande \du renvoie:

Nom du rôle = postgres@implicit_files

Et cette commande postgres=# \password postgres renvoie une erreur:

ERREUR: le rôle "postgres" n'existe pas.

Mais ce postgres=# \password postgres@implicit_files fonctionne bien.

De plus, après Sudo -u postgres createuser -s postgres, la première variante fonctionne également.

0
Adam

Je ne pense pas que Sudo soit nécessaire ici car psql -l renvoie une liste de bases de données. Cela me dit que initdb a été exécuté sous l'utilisateur actuel de l'utilisateur, et non sous l'utilisateur postgres.

Vous pouvez simplement:

psql

Et continuez le tutoriel.

Je suggérerais les points généraux de A.H sur la création de l'utilisateur postgres et de la base de données, car de nombreuses applications peuvent s'attendre à ce que cela existe.

Une brève explication:

PostgreSQL ne fonctionnera pas avec un accès administratif au système d'exploitation. Au lieu de cela, il fonctionne avec un utilisateur ordinaire. Afin de prendre en charge l'authentification entre pairs (en demandant au système d'exploitation qui tente de se connecter), il crée un utilisateur et une base de données avec l'utilisateur qui exécute le processus d'initialisation. Dans ce cas, c'était votre utilisateur normal.

0
Chris Travers