psql: FATAL: Die Rolle "postgres" existiert nicht


404

Ich bin ein Postgres-Neuling.

Ich habe die postgres.app für Mac installiert. Ich habe mit den psql-Befehlen herumgespielt und versehentlich die postgres-Datenbank gelöscht. Ich weiß nicht, was drin war.

Ich arbeite derzeit an einem Tutorial: http://www.rosslaird.com/blog/building-a-project-with-mezzanine/

Und ich stecke fest sudo -u postgres psql postgres

FEHLERMELDUNG: psql: FATAL: role "postgres" does not exist

$ welche psql

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

Daraus wird gedruckt 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)

Also, was sind die Schritte, die ich unternehmen sollte? Alles, was mit psql zu tun hat, löschen und alles neu installieren?

Danke für die Hilfe Jungs!


1
Computer neu starten. Stellt sicher, dass Launchd from brew services start postresqlausgeführt wird.
Michael Dimmitt

Antworten:


410

HINWEIS: Wenn Sie Postgres mit Homebrew installiert haben, lesen Sie den Kommentar von @ user3402754 unten.

Beachten Sie, dass die Fehlermeldung NICHT über eine fehlende Datenbank, sondern über eine fehlende Rolle spricht. Später im Anmeldevorgang kann es auch vorkommen, dass Sie über die fehlende Datenbank stolpern.

Der erste Schritt besteht jedoch darin, die fehlende Rolle zu überprüfen: Was ist die Ausgabe innerhalb psqldes Befehls \du? Auf meinem Ubuntu-System sieht die entsprechende Zeile folgendermaßen aus:

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

Wenn es nicht mindestens eine Rolle gibt superuser, dann hast du ein Problem :-)

Wenn es eine gibt, können Sie sich damit anmelden. Und schauen Sie sich die Ausgabe Ihres \lBefehls an: Die Berechtigungen für userdie template0und template1-Datenbanken sind die gleichen wie auf meinem Ubuntu-System für den Superuser postgres. Ich denke, Ihr Setup wird einfach userals Superuser verwendet. Sie können also diesen Befehl versuchen, um sich anzumelden:

sudo -u user psql user

Wenn useres sich wirklich um den DB-Superuser handelt, können Sie einen weiteren DB-Superuser und eine private, leere Datenbank für ihn erstellen:

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

Da Ihr postgres.app-Setup dies jedoch nicht zu tun scheint, sollten Sie dies auch nicht tun. Passen Sie das Tutorial einfach an.


10
Für mich wurde der Benutzer nicht erstellt - dies funktionierte stattdessen CREATE USER postgres WITH SUPERUSER PASSWORD 'password'; mit postgres v10.
Arcseldon

229
Wenn Sie Postgres von homebrewdann installiert haben , müssen Sie /usr/local/opt/postgres/bin/createuser -s postgresin Ihrem Terminal
ausführen

7
Ich musste laufen/usr/local/opt/postgresql/bin/createuser -s postgres
user1807782

1
@ user1807782 Du hast meinen Tag gerettet; Ich denke, Sie sollten dies als Antwort hinzufügen.
Tolga

1
Wenn Sie eine bestimmte Version von Postgres verwenden, müssen Sie die Version in den Pfad aufnehmen -/usr/local/opt/postgresql@11/bin/createuser -s postgres
Digitrance

264

Der Schlüssel lautet "Ich habe die postgres.app für Mac installiert." Diese Anwendung richtet die lokale PostgreSQL-Installation mit einem Datenbank-Superuser ein, dessen Rollenname mit Ihrem Anmeldenamen (Kurzname) übereinstimmt.

Beim ersten Start von Postgres.app wird die $ USER-Datenbank erstellt. Dies ist die Standarddatenbank für psql, wenn keine angegeben ist. Der Standardbenutzer ist $ USER ohne Kennwort.

Einige Skripte (z. B. eine Datenbanksicherung, die mit pgdumpeinem Linux-System erstellt wurde) und Tutorials setzen voraus, dass der Superuser den traditionellen Rollennamen hat postgres.

Sie können Ihre lokale Installation etwas traditioneller gestalten und diese Probleme durch einmaliges Ausführen vermeiden:

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

was dazu führen wird, dass diese FATAL: Rolle "Postgres" nicht existiert , verschwinden .


119
Wenn Sie Postgres von Homebrew verwenden, möchten Sie /usr/local/Cellar/postgresql/9.2.4/bin/createuser -s postgres(natürlich für Version 9.2.4).
Roger Lipscombe

1
Für postgres.app 9.3 scheinen sie die Verzeichnisse neu angeordnet zu haben. Ich habe versucht: /Applications/Postgres.app/Contents/Versions/9.3/bin/createuser -s postgres, aber dies erzeugte die gleiche Fehlermeldung: "createuser: konnte keine Verbindung zur Datenbank herstellen postgres: FATAL: Rolle" postgres "existiert nicht "
Michael Coxon

7
/Applications/Postgres.app/Contents/Versions/9.3/bin/createuser -s postgreslief richtig für mich.
cjspurgeon

9
@ RogerLipscombe Wenn Sie brew link postgresqlnach der Installation ausführen, müssen Sie nicht den gesamten Pfad anhängen createuser, ein einfacher createuser -s postgreswird großartig funktionieren
AlessioX

2
createuser -s postgresarbeitete für mich. Ich habe Postgres mit Homebrew installiert
biniam

228

Für MAC:

  1. Installieren Sie Homebrew
  2. brew install postgres
  3. initdb /usr/local/var/postgres
  4. /usr/local/Cellar/postgresql/<version>/bin/createuser -s postgresoder /usr/local/opt/postgres/bin/createuser -s postgresdie nur die neueste Version verwenden.
  5. Starten Sie den Postgres-Server manuell: pg_ctl -D /usr/local/var/postgres start

Server beim Start starten

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

Jetzt wird es eingerichtet, mit psql -U postgres -h localhostPgAdmin für die GUI angemeldet oder verwendet.

Standardmäßig hat der Benutzer postgreskein Anmeldekennwort.

Weitere Artikel wie diesen finden Sie auf dieser Website: https://medium.com/@Nithanaroy/installing-postgres-on-mac-18f017c5d3f7


3
Mit der neuesten brew services start postgresqlBrauinstallation können Sie Postgres starten
Automatico

<3 <3 <3 <3 <3 <3
Adeel Ahmad

Dies ist die beste Antwort
Alejandro Pablo Tkachuk

39
createuser postgres --interactive

oder mache einen superuser postgresl nur mit

createuser postgres -s


Ich fand diese Antwort nützlich, als mein pgadmin immer wieder nach dem Postgres-Benutzer fragte und ich zunächst keine Postgres-Rolle hatte. Dieser Befehl erstellte sie, ich fügte das automatisch generierte pw zu meinem pgadmin hinzu und das Problem wurde gelöst!
Theusual

Das funktioniert bei mir .. aber so: "create user postgres"
Roberto Rodriguez

31

Dies geschieht, wenn Sie initdbmit einem Benutzer ausgeführt werden, dessen ID nicht lautetpostgres , ohne den postgresBenutzernamen mit --username=postgresoder anzugeben -U postgres.

Der Datenbankcluster wird dann mit dem Benutzerkonto des Systems erstellt, mit dem Sie initdb ausgeführt haben, und erhält Superuser-Berechtigungen.

Um dies zu beheben, erstellen Sie einfach einen neuen Benutzer postgresmit der Option --superusermit dem createusermit Postgres gelieferten Dienstprogramm. Das Dienstprogramm befindet sich im Postgres- binVerzeichnis. z.B

createuser --superuser postgres

Wenn Sie einen benutzerdefinierten Hostnamen oder Port haben, müssen Sie die entsprechenden Optionen festlegen .

Vergessen Sie nicht, das andere Benutzerkonto zu löschen, das von initdb für Sie erstellt wurde.


2
Dies ist die informativste Antwort.
MyWrathAcademia


16

Ich musste deaktivieren $PGUSER:

$ unset PGUSER
$ createuser -s postgres

1
Oh Mann, endlich verstanden, worum es ging. Es stellt sich heraus, dass Sie versuchen, Benutzer-Postgres als Benutzer-Postgres zu erstellen
Taras Matsyk

14

Zuerst müssen Sie einen Benutzer erstellen:

sudo -u postgres createuser --superuser $USER

Nachdem Sie eine Datenbank erstellt haben:

sudo -u postgres createdb $USER

Ändern Sie $USER Ihren Systembenutzernamen.

Die komplette Lösung sehen Sie hier .


8

Wenn Sie dies in der Befehlszeile ausführen, sollte dies behoben sein

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


1
Dies ist das einzige, was für mich funktioniert hat. Vielen Dank!
Herb Meehan

4

Das Löschen der postgresDatenbank spielt keine Rolle. Diese Datenbank ist anfangs leer und dient lediglich dazu, dass der postgresBenutzer eine Art "Zuhause" hat, mit dem er sich verbinden kann, falls er eines benötigt.

Sie können es dennoch mit dem SQL-Befehl neu erstellen CREATE DATABASE postgres;

Beachten Sie, dass das in der Frage erwähnte Tutorial nicht postgres.appfür diesen Zweck geschrieben wurde. Im Gegensatz zu PostgreSQL für Unix im Allgemeinen wird postgres.appversucht, wie eine normale Anwendung auszusehen, im Gegensatz zu einem Dienst, der von einem dedizierten postgresBenutzer ausgeführt wird, der andere Berechtigungen als Ihr normaler Benutzer hat.postgres.appwird von Ihrem eigenen Konto ausgeführt und verwaltet.

Anstelle dieses Befehls: sudo -u postgres psql -U postgreswäre es eher im Sinne von postgres.app, nur: auszugeben psql, das automatisch eine Verbindung zu einer Datenbank herstellt, die dem Namen Ihres Benutzers entspricht, und mit einem DB-Konto mit demselben Namen, das zufällig Superuser ist Es kann alles tun, was die Berechtigungen betrifft.


Okay. Aber warum erhalte ich eine Fehlermeldung, ERROR: cannot drop the currently open databasewenn ich versuche, die Benutzerdatenbank zu löschen? Ist es also nicht eine gute Praxis, diese postgres.app zu verwenden?
user805981

Sie können eine Datenbank nicht löschen, während Sie mit ihr verbunden sind. warum solltest du es überhaupt löschen wollen? Es ist hier für Ihre Bequemlichkeit.
Daniel Vérité

Ich wollte nur sehen, ob ich könnte. Es ist also wie eine Standarddatenbank, die korrekt ist, wenn ich meine psql und postgres.app starte? Was ist nun mit den Zugriffsrechten? Ich kann sie nicht mehr einstellen? Ich sehe, dass template0 und template1 Zugriffsrechte haben
user805981

@ user805981 Postgres.appdient zu Test- und Entwicklungszwecken; Es handelt sich um ein PostgreSQL-Paket von Heroku, das Mac-Benutzern, die mit Ruby on Rails entwickeln, das Testen mit PostgreSQL anstelle von Standard-SQLite erleichtern soll. Rails verwendet dazu, mit SQLite zu testen und auf PostgreSQL bereitzustellen, was alle möglichen Probleme verursachte. Deshalb versuchte Heroku, das Testen auch auf PostgreSQL zu vereinfachen. Postgres.appist gut zum Testen, aber ich würde nicht in Betracht ziehen, es für die Produktion oder für echte Daten zu verwenden, das ist einfach nicht das, wofür es ist.
Craig Ringer

4

Für das, was es wert ist, habe ich Ubuntu und viele Pakete installiert und es ging in Konflikt damit.

Für mich war die richtige Antwort:

sudo -i -u postgres-xc
psql

2

Dies ist der einzige, der es für mich behoben hat:

createuser -s -U $USER

2
Dies macht den aktuellen Benutzer zu einem System-Superuser und nicht nur zu einem Postgres-Superuser. Ich würde sagen, dass dies im Allgemeinen eine schlechte Idee wäre, da es die üblichen Sicherheitsrichtlinien umgeht. Sie sollten Benutzer sein sudo, um temporäre Superuser-Berechtigungen zu erhalten.
Sean Dawson

1

Auf dem Ubuntu-System habe ich PostgreSQL gelöscht und neu installiert. Alle Datenbanken werden wiederhergestellt. Dies löste das Problem für mich.

Hinweis - Nehmen Sie die Sicherung der Datenbanken, um die Sicherheit zu gewährleisten.


0

Ich denke nicht, dass sudo hier benötigt wird, weil psql -l eine Liste von Datenbanken zurückgibt. Dies sagt mir, dass initdb unter dem aktuellen Benutzer des Benutzers ausgeführt wurde, nicht unter dem Benutzer postgres.

Sie können einfach:

psql

Und setzen Sie das Tutorial fort.

Ich würde AHs allgemeine Punkte zum Erstellen des Postgres-Benutzers und der Datenbank vorschlagen, da viele Anwendungen dies möglicherweise erwarten.

Eine kurze Erklärung:

PostgreSQL wird nicht mit Administratorzugriff auf das Betriebssystem ausgeführt. Stattdessen wird es mit einem normalen Benutzer ausgeführt. Um die Peer-Authentifizierung zu unterstützen (indem das Betriebssystem gefragt wird, wer versucht, eine Verbindung herzustellen), werden ein Benutzer und eine Datenbank mit dem Benutzer erstellt, der den Initialisierungsprozess ausführt. In diesem Fall war es Ihr normaler Benutzer.


löscht nur wenige wichtige Unterschiede bei Postgres. Vielen Dank.
Imsrgadich

0

Ich blieb in dieser Angelegenheit stecken, nachdem ich am brew services stop postgresqlTag zuvor hingerichtet hatte .
Der folgende Tag: brew services start postgresqlwürde nicht funktionieren. Dies liegt daran, wie bei der Installation mit Homebrew gezeigt wird. postgresql verwendet ein launchd ..., das geladen wird, wenn Ihr Computer eingeschaltet wird.

Lösung:
brew services start postgresql
Starten Sie Ihren Computer neu.


0

Der \duBefehl return:

Rollenname = postgres@implicit_files

Und dieser Befehl gibt einen postgres=# \password postgresFehler zurück:

FEHLER: Rolle "Postgres" existiert nicht.

Aber das postgres=# \password postgres@implicit_filesläuft gut.

Auch nach sudo -u postgres createuser -s postgresder ersten Variante funktioniert das auch.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.