PostgreSQL-Fehler: Schwerwiegend: Die Rolle "Benutzername" existiert nicht

732

Ich richte mein PostgreSQL 9.1 ein. Ich kann mit PostgreSQL nichts anfangen: kann nicht createdb, kann nicht createuser; Alle Operationen geben die Fehlermeldung zurück

Fatal: role h9uest does not exist

h9uestist mein Kontoname und ich sudo apt-get installPostgreSQL 9.1 unter diesem Konto.
Ein ähnlicher Fehler bleibt für das rootKonto bestehen.

h9uest
quelle
1
Danach können Sie den Weg laufen FATAL: role "user" is not permitted to log in, überprüfen dba.stackexchange.com/questions/57723/... dafür.
kqw
19
Ich habe diese Frage hier beantwortet . Lesen Sie auch dieses Tutorial " So installieren Sie Postgres für Ubuntu Linux ".
Ruzenhack
@ Ruzenhack dieser Tutorial Link war genau das, was ich brauchte! Sehr klar und einfach
Dwanderson
4
psql -h localhost -U postgres
Metin Atalay
Wenn Sie den Fehler role doesn't existund den Fehler erhalten, can't create role, it already existsüberprüfen Sie diese Antwort: stackoverflow.com/a/56658832/1689770
Jonathan

Antworten:

774

Verwenden Sie den Betriebssystembenutzer postgres , um Ihre Datenbank zu erstellen - sofern Sie keine Datenbankrolle mit den erforderlichen Berechtigungen eingerichtet haben, die Ihrem gleichnamigen Betriebssystembenutzer entspricht ( h9uestin Ihrem Fall):

sudo -u postgres -i

Wie hier oder hier empfohlen .

Dann versuchen Sie es erneut. Geben Sie ein, exitwenn Sie mit dem Betrieb als Systembenutzer fertig sind postgres.

Oder führen Sie den einzelnen Befehl createuserwie postgresmit aus sudo, wie von drees in einer anderen Antwort gezeigt.

Der Punkt besteht darin, den Betriebssystembenutzer zu verwenden, der der gleichnamigen Datenbankrolle entspricht, um über die identAuthentifizierung Zugriff zu erhalten . postgresist der Standardbenutzer des Betriebssystems, der den Datenbankcluster initialisiert hat. Das Handbuch:

Um das Datenbanksystem zu booten, enthält ein frisch initialisiertes System immer eine vordefinierte Rolle. Diese Rolle ist immer ein "Superuser" und hat standardmäßig (sofern sie nicht beim Ausführen geändert wird initdb) denselben Namen wie der Betriebssystembenutzer, der den Datenbankcluster initialisiert hat. Üblicherweise wird diese Rolle benannt postgres. Um weitere Rollen zu erstellen, müssen Sie zunächst eine Verbindung als diese ursprüngliche Rolle herstellen.

Ich habe von seltsamen Setups mit nicht standardmäßigen Benutzernamen gehört oder bei denen der Betriebssystembenutzer nicht existiert. Dort müssten Sie Ihre Strategie anpassen.

Weitere Informationen zu Datenbankrollen und Clientauthentifizierung finden Sie im Handbuch.

Erwin Brandstetter
quelle
1
Es ist unmöglich, sudo etcals Benutzer postgres ausgeführt zu werden ... Wie installiere ich ein Programm? Siehe dieses S2geometry-Installationsproblem .
Peter Krauss
Abhängig von der Konfiguration kann man einfach brauchen su postgres.
Fabien Snauwaert
1
sudo -u postgresfunktioniert nicht, während sudo -u postgres -ifunktioniert! Was macht die -iFlagge?
Parsecer
1
@parsecer: Eine interaktive Shell wird gestartet, ähnlich su, aber basierend auf Sudo-Berechtigungen. Siehe man sudo.
Erwin Brandstetter
284

Nachdem ich die Lösungen vieler anderer Leute ausprobiert hatte und ohne Erfolg, half mir diese Antwort schließlich.

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

Kurz gesagt, Laufen

sudo -u postgres createuser owning_user

Erstellt eine Rolle mit dem Namen owning_user (in diesem Fall h9uest). Danach können Sie rake db:createvom Terminal aus unter dem von Ihnen eingerichteten Kontonamen ausgeführt werden, ohne die Postgres-Umgebung aufrufen zu müssen.

drees
quelle
29
Wenn Sie danach den Fehler "Unzureichende Berechtigungen" erhalten, können Sie das Flag -s an den obigen Befehl anhängen. Dadurch wird Ihr neuer Benutzer als Superuser erstellt. Bitte beachten Sie die Sicherheitsauswirkungen, falls Sie sich dazu entschließen.
Sarink
1
Ich erhalte "unzureichende Berechtigungen", aber jetzt erhalte ich FEHLER: Rolle "Benutzername" existiert bereits.
Wylliam Judd
4
@ConnorLeech Sie können 'postgres' durch den Namen Ihres PG-Superusers ersetzen. In meinem Fall war es mein Name.
Myfashionhub
1
Ich musste auch verwenden -sund musste nicht verwenden sudo -u postgres( createuser new_userfunktionierte einfach gut)
Meekohi
2
psql: FATAL: role "jonny" does not existOkay, sudo -u postgres -s createuser jonnydann warum createuser: creation of new role failed: ERROR: role "jonny" already exists
Jonathan
134
sudo su - postgres

psql template1

Erstellen einer Rolle auf pgsql mit dem Privileg als "Superuser"

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

Dann erstellen Sie Benutzer

CREATE USER username; 
eg. CREATE USER demo;

Weisen Sie dem Benutzer Berechtigungen zu

GRANT ROOT TO username;

Aktivieren Sie dann die Anmeldung für diesen Benutzer, damit Sie z. B. psql template1vom normalen $Terminal aus ausführen können :

ALTER ROLE username WITH LOGIN;
Mohammed Saleem
quelle
4
Ich habe gerade eine neue Installation von PostgreSQL 9.4.4 durchgeführt und konnte Folgendes verwenden, um einen neuen Superuser zu erstellen: CREATE ROLE username superuser createdb login; der alle drei Schritte kombiniert ...
iPad Guy
25
# GRANT ROOT für mich; FEHLER: Rolle "root" existiert nicht
Shacker
6
einfachere Version: sudo -u postgres createuser --superuser $USER; sudo -u postgres createdb $USER
Zach Estela
2
@ Shacker#GRANT postgres TO username
7kemZmani
Ich benutze root, um den Server zu starten, dann `` `psql -U postgres -h 127.0.0.1 --command" CREATE USER postgresondocker WITH SUPERUSER PASSWORD 'postgresondocker'; " && \ createdb -O postgresondocker postgresondocker`` Kann ich root verwenden, um dies zu tun, wenn ich es dem pg_ident hinzufüge?
Shivangi Singh
85

Durch die Installation von postgres mit apt-getwird keine Benutzerrolle oder Datenbank erstellt.

So erstellen Sie eine Superuser-Rolle und eine Datenbank für Ihr persönliches Benutzerkonto:

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

Miles Erickson
quelle
1
Ich musste den zweiten Teil ausführen als:sudo -u postgres createdb $(whoami)
SanD
2
@SanD Wenn Sie Ihr eigenes Benutzerkonto als Superuser erstellt haben (über das -sFlag im ersten Befehl), können Sie die Datenbank als Sie selbst erstellen. Sie müssen nicht createdbals ausführen postgres.
Miles Erickson
2
Gute Antwort! Ersparte mir Stunden beim Debuggen !!
Aminu Kano
79

Das funktioniert bei mir:

psql -h localhost -U postgres
mateusz.szymborski
quelle
Bitte fügen Sie das Passwort für den oben genannten Benutzer hinzu.
Chaudhry Waqas
1
@ Vincent, wenn das Passwort nach der PostgreSQL-Installation nie geändert wurde, ist es standardmäßig postgres(unter Linux und Windows getestet).
Silvioprog
1
role postgres does not exist
Jacob Schneider
15

Arbeitsmethode,

  1. vi /etc/postgresql/9.3/main/pg_hba.conf
  2. local all postgres peer hier Peer zu Vertrauen wechseln
  3. neu starten, sudo service postgresql restart

  4. jetzt versuchen, psql -U postgres

Mohideen bin Mohammed
quelle
1
Es sollte offensichtlich sein, dass die trustMethode nur in einer vollständig sicheren Umgebung ratsam ist. Während der Zugriff über nicht vertrauenswürdige Verbindungen möglich ist , sollten Sie Ihren DB-Cluster niemals so verfügbar machen.
Erwin Brandstetter
Dieser ist gut
horoyoi o
Überprüfen Sie: Wenn der Postgresql-Dienst nicht gestartet wird, liegt möglicherweise ein Fehler in der Datei vorpg_hba.conf
Gehen Sie
11

Verwenden Sie für die Version Postgres 9.5 den folgenden Befehl:

psql -h localhost -U postgres

Hoffe das wird helfen.

Kalyan Halder Raaz
quelle
11
psql postgres

postgres=# CREATE ROLE username superuser;
postgres=# ALTER ROLE username WITH LOGIN;
Abel
quelle
4
psql postgresErgebnisse:psql: FATAL: role "root" does not exist
TomSawyer
2
psql postgres -U postgres? Hängt vom Benutzer (-U) ab, den Sie haben.
Meadowlark Bradsher
Vielen Dank! Ich hatte Probleme, postgresql mit root zu sichern, da ich das Passwort für postgres nicht kenne
Dika
7

Geben Sie in die lokale Benutzeraufforderung und nicht in die Root-Benutzeraufforderung ein

sudo -u postgres createuser <local username>

Geben Sie dann das Passwort für den lokalen Benutzer ein.

Geben Sie dann den vorherigen Befehl ein, der generiert hat, dass "Benutzername der Rolle 'nicht vorhanden ist".

Die obigen Schritte haben das Problem für mich gelöst. Wenn nicht, senden Sie bitte Terminalnachrichten für die oben genannten Schritte.

Robert Cambil
quelle
3

Das manuelle Erstellen eines DB-Clusters hat es in meinem Fall gelöst.

Aus irgendeinem Grund wurde bei der Installation von postgres die "ursprüngliche Datenbank" nicht erstellt. Das Ausführen initdbhat den Trick für mich getan.

Diese Lösung finden Sie im PostgreSQL-Wiki - Erste Schritte :

initdb

Wenn Sie Postgres normalerweise auf Ihrem Betriebssystem installieren, wird eine "anfängliche Datenbank" erstellt und der Postgres-Server-Daemon wird ausgeführt. Wenn nicht, müssen Sie initdb ausführen

Natacha
quelle
2

Für Windows- Benutzer:psql -U postgres

Sie sollten dann die Befehlszeilenschnittstelle zu PostgreSQL sehen: postgres=#

Andriy Tolstoi
quelle
0

Befolgen Sie diese Schritte und es wird für Sie funktionieren:

  1. Lauf msfconsole
  2. Geben Sie db_console ein
  3. Einige Informationen werden angezeigt, wenn Sie die Informationen ausgewählt haben, die Sie angeben sollen: db_connect user:pass@host:port.../databaseEntschuldigung, ich erinnere mich nicht daran, aber es ist so, dann ersetzen Sie den Benutzer und das Passwort sowie den Host und die Datenbank durch die Informationen, die database.ymlin der Position enthalten sind ::/usr/share/metasploit-framework/config
  4. du wirst sehen. Neuerstellung des Modellcaches im Hintergrund.
  5. Geben Sie apt-get update && apt-get upgrade ein, nachdem das Update das Terminal und die msfconsole für das Mittagessen neu gestartet hat. Sie können dies überprüfen, indem Sie eingeben, msfconsole: msf>db_statusdass die Verbindung hergestellt ist.
Loli Pronomen
quelle
0

Dump und Wiederherstellung mit --no-owner --no-privilegesFlags

z.B

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

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

Srghma
quelle