Erreur PostgreSQL: Fatal: le rôle "nom d'utilisateur" n'existe pas


734

J'installe mon PostgreSQL 9.1. Je ne peux rien faire avec PostgreSQL: impossible createdb, impossible createuser; toutes les opérations renvoient le message d'erreur

Fatal: role h9uest does not exist

h9uestest mon nom de compte, et je sudo apt-get installPostgreSQL 9.1 sous ce compte.
Une erreur similaire persiste pour le rootcompte.


1
Ensuite, vous pourriez rencontrer FATAL: role "user" is not permitted to log in, consultez dba.stackexchange.com/questions/57723/… pour cela.
kqw

19
J'ai répondu à cette question ici . Lisez également ce tutoriel " Comment installer Postgres pour Ubuntu Linux ".
ruzenhack

@Ruzenhack ce lien tutoriel était exactement ce dont j'avais besoin! Très clair et simple
dwanderson

4
psql -h localhost -U postgres
Metin Atalay

Si vous obtenez l'erreur role doesn't existET l'erreur, can't create role, it already existsconsultez cette réponse: stackoverflow.com/a/56658832/1689770
Jonathan

Réponses:


775

Utilisez l'utilisateur du système d'exploitation postgres pour créer votre base de données - tant que vous n'avez pas configuré un rôle de base de données avec les privilèges nécessaires qui correspond à l'utilisateur de votre système d'exploitation du même nom ( h9uestdans votre cas):

sudo -u postgres -i

Comme recommandé ici ou ici .

Réessayez ensuite. Tapez exitlorsque vous avez terminé de fonctionner en tant qu'utilisateur système postgres.

Ou exécutez la commande unique createusercomme postgresavec sudo, comme démontré par drees dans une autre réponse.

Le point est d'utiliser l'utilisateur du système d'exploitation correspondant au rôle de base de données du même nom pour obtenir l'accès via l' identauthentification . postgresest l'utilisateur du système d'exploitation par défaut qui a initialisé le cluster de base de données. Le manuel:

Afin d'amorcer le système de base de données, un système fraîchement initialisé contient toujours un rôle prédéfini. Ce rôle est toujours un «superutilisateur» et, par défaut (sauf modification lors de l'exécution initdb), il aura le même nom que l'utilisateur du système d'exploitation qui a initialisé le cluster de base de données. Habituellement, ce rôle sera nommé postgres. Pour créer plus de rôles, vous devez d'abord vous connecter en tant que rôle initial.

J'ai entendu parler de configurations étranges avec des noms d'utilisateur non standard ou où l'utilisateur du système d'exploitation n'existe pas. Vous auriez besoin d'y adapter votre stratégie.

Lisez à propos des rôles de base de données et de l'authentification client dans le manuel.


1
Il est impossible de fonctionner en sudo etctant qu'utilisateur postgres ... Comment installer un programme? Voir ce problème d'installation de S2geometry .
Peter Krauss

Selon la configuration, on pourrait simplement avoir besoin su postgres.
Fabien Snauwaert

1
sudo -u postgresne fonctionne pas, tout sudo -u postgres -ifonctionne! Que fait le -idrapeau?
parsecer

1
@parsecer: un shell interactif est démarré, similaire à su, mais basé sur les privilèges sudo. Tu vois man sudo.
Erwin Brandstetter

284

Après avoir essayé les solutions de nombreuses autres personnes, et sans succès, cette réponse m'a finalement aidé.

https://stackoverflow.com/a/16974197/2433309

Bref, courir

sudo -u postgres createuser owning_user

crée un rôle avec le nom owning_user (dans ce cas, h9uest). Après cela, vous pouvez exécuter à rake db:createpartir du terminal sous le nom de compte que vous avez configuré sans avoir à entrer dans l'environnement Postgres.


29
Si vous obtenez une erreur "privilèges insuffisants" après cela, vous pouvez ajouter l'indicateur -s à la commande ci-dessus. Cela créera votre nouvel utilisateur en tant que superutilisateur. Veuillez être conscient des implications de sécurité de cela si vous décidez de le faire.
Sarink

1
J'obtiens des "privilèges insuffisants", mais maintenant j'obtiens ERREUR: le rouleau "nom d'utilisateur" existe déjà.
Wylliam Judd

5
@ConnorLeech Vous pouvez remplacer «postgres» par le nom de votre super utilisateur PG. Dans mon cas, c'était mon nom.
myfashionhub

1
J'ai également dû utiliser -s, et je n'ai pas eu besoin d'utiliser sudo -u postgres( createuser new_user
ça a

2
psql: FATAL: role "jonny" does not existok sudo -u postgres -s createuser jonnyalors pourquoi createuser: creation of new role failed: ERROR: role "jonny" already exists
Jonathan

134
sudo su - postgres

psql template1

création d'un rôle sur pgsql avec privilège en tant que "superutilisateur"

CREATE ROLE username superuser;
eg. CREATE ROLE demo superuser;

Ensuite, créez un utilisateur

CREATE USER username; 
eg. CREATE USER demo;

Attribuer un privilège à l'utilisateur

GRANT ROOT TO username;

Et puis activez la connexion de cet utilisateur, de sorte que vous pouvez exécuter par exemple psql template1:, à partir du $terminal normal :

ALTER ROLE username WITH LOGIN;

4
Je viens de faire une nouvelle installation de PostgreSQL 9.4.4 et j'ai pu utiliser ce qui suit pour créer un nouveau superutilisateur: CREATE ROLE username superuser createdb login; qui combine les trois étapes ...
iPad Guy

25
# GRANT ROOT à moi; ERREUR: le rôle "root" n'existe pas
shacker

6
version plus simple: sudo -u postgres createuser --superuser $USER; sudo -u postgres createdb $USER
Zach Estela

2
@shacker#GRANT postgres TO username
7kemZmani

J'utilise root pour démarrer le serveur puis `` `psql -U postgres -h 127.0.0.1 --command" CREATE USER postgresondocker WITH SUPERUSER PASSWORD 'postgresondocker'; " && \ createdb -O postgresondocker postgresondocker`` puis-je utiliser root pour le faire si je l'ajoute à pg_ident?
Shivangi Singh

85

L'installation de postgres à l'aide de apt-getne crée pas de rôle d'utilisateur ou de base de données.

Pour créer un rôle de superutilisateur et une base de données pour votre compte d'utilisateur personnel:

sudo -u postgres createuser -s $(whoami); createdb $(whoami)


1
J'avais besoin d'exécuter la deuxième partie en tant que:sudo -u postgres createdb $(whoami)
SanD

2
@SanD Si vous avez créé votre propre compte utilisateur en tant que super utilisateur (via l' -sindicateur dans la première commande), vous pouvez créer la base de données comme vous-même. Vous n'aurez pas besoin d'exécuter en createdbtant que postgres.
Miles Erickson

2
Très bonne réponse! M'a sauvé des heures de débogage !!
Aminu Kano

79

Cela fonctionne pour moi:

psql -h localhost -U postgres

veuillez ajouter le mot de passe de l'utilisateur ci-dessus.
Chaudhry Waqas

1
@Vincent si le mot de passe n'a jamais été modifié après l'installation de PostgreSQL, il l'est par défaut postgres(testé sur Linux et Windows).
silvioprog

1
role postgres does not exist
Jacob Schneider

15

Méthode de travail,

  1. vi /etc/postgresql/9.3/main/pg_hba.conf
  2. local all postgres peer ici changer de pair pour faire confiance
  3. redémarrer, sudo service postgresql restart

  4. maintenant essaye, psql -U postgres


1
Il doit être évident que la trustméthode n'est recommandée que dans un environnement totalement sécurisé. Bien que l'accès à partir de connexions non fiables soit possible, n'exposez jamais votre cluster de base de données de cette manière.
Erwin Brandstetter

celui-ci est bon
horoyoi o

Vérifier: si le service postgresql n'est pas démarré, il peut y avoir une erreur dans le fichierpg_hba.conf
Marchez le

11

Pour la version Postgres 9.5, utilisez la commande suivante:

psql -h localhost -U postgres

J'espère que cela vous aidera.


11
psql postgres

postgres=# CREATE ROLE username superuser;
postgres=# ALTER ROLE username WITH LOGIN;

4
psql postgresrésultats:psql: FATAL: role "root" does not exist
TomSawyer

2
psql postgres -U postgres? Cela dépend de l'utilisateur (-U) que vous avez.
Meadowlark Bradsher

Merci! J'ai eu du mal à sauvegarder postgresql avec root car je ne connais pas le mot de passe postgres
Dika

7

Dans l'invite de l'utilisateur local, pas l'invite de l'utilisateur root, tapez

sudo -u postgres createuser <local username>

Saisissez ensuite le mot de passe de l'utilisateur local.

Entrez ensuite la commande précédente qui a généré "le rôle" nom d'utilisateur "n'existe pas."

Les étapes ci-dessus ont résolu le problème pour moi. Sinon, veuillez envoyer les messages du terminal pour les étapes ci-dessus.



3

La création manuelle d'un cluster DB l'a résolu dans mon cas.

Pour une raison quelconque, lorsque j'ai installé postgres, la "base de données initiale" n'a pas été créée. Exécutioninitdb fait l'affaire pour moi.

Cette solution est fournie dans le wiki PostgreSQL - Premières étapes :

initdb

L'installation de postgres sur votre système d'exploitation crée généralement une "base de données initiale" et démarre le démon du serveur postgres. Sinon, vous devrez exécuter initdb


2

Pour les utilisateurs de Windows :psql -U postgres

Vous devriez alors voir l'interface de ligne de commande vers PostgreSQL: postgres=#


0

Suivez ces étapes et cela fonctionnera pour vous:

  1. courir msfconsole
  2. type db_console
  3. certaines informations vous seront montrées choisir les informations qui vous disent de faire: db_connect user:pass@host:port.../databasedésolé je ne m'en souviens pas mais c'est comme celui-ci alors remplacez l'utilisateur et le mot de passe et l'hôte et la base de données par les informations incluses dans le database.ymldans l'emplacement :/usr/share/metasploit-framework/config
  4. tu verras. reconstruire le cache du modèle en arrière-plan.
  5. Tapez apt-get update && apt-get upgrade après la mise à jour redémarrez le terminal et déjeuner msfconsole et cela fonctionne, vous pouvez vérifier qu'en tapant, msfconsole: msf>db_statusvous verrez qu'il est connecté.

0

vider et restaurer avec des --no-owner --no-privilegesdrapeaux

par exemple

vidage - pg_dump --no-owner --no-privileges --format=c --dbname=postgres://userpass:username@postgres:5432/schemaname > /tmp/full.dump

restaurer - pg_restore --no-owner --no-privileges --format=c --dbname=postgres://userpass:username@postgres:5432/schemaname /tmp/full.dump

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.