it-swarm.com.de

psql: FATAL: Die Rolle "postgres" existiert nicht

Ich bin ein Postgres-Neuling.

Ich habe die postgres.app für Mac installiert. Ich habe mit den psql-Befehlen rumgespielt 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 bei Sudo -u postgres psql postgres

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

$ welche psql

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

Dies ist, was aus psql -l heraus gedruckt wird

                                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)

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

Danke für die Hilfe Jungs!

315
user805981

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

Beachten Sie, dass die Fehlermeldung NOT über eine fehlende Datenbank spricht, es spricht über eine fehlende Rolle. Später beim Anmeldevorgang kann es auch zu einem Stolpern über die fehlende Datenbank kommen.

Der erste Schritt besteht jedoch darin, die fehlende Rolle zu überprüfen: Wie lautet die Ausgabe in psql des 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 mit superuser gibt, dann hast du ein Problem :-)

Wenn es einen gibt, können Sie sich damit anmelden. Und wenn Sie sich die Ausgabe Ihres Befehls \l ansehen: Die Berechtigungen für user in den Datenbanken template0 und template1 sind dieselben wie auf meinem Ubuntu-System für den Superuser postgres. Ich denke, Ihr Setup verwendet einfach user als Superuser. Sie könnten also versuchen, sich mit diesem Befehl anzumelden:

Sudo -u user psql user

Wenn user wirklich der DB-Superuser ist, können Sie für ihn einen weiteren DB-Superuser und eine private, leere Datenbank erstellen:

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

Aber da Ihr postgres.app-Setup dies nicht zu tun scheint, sollten Sie dies auch nicht tun. Einfach das Tutorial anpassen.

311
A.H.

Der Schlüssel ist "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 Login-Namen (Kurzname) identisch ist.

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.

Bei einigen Skripten (z. B. einer mit pgdump auf einem Linux-System erstellten Datenbanksicherung) und Lernprogrammen wird davon ausgegangen, dass der Superuser den traditionellen Rollennamen postgres hat.

Sie können Ihre lokale Installation etwas traditioneller gestalten und diese Probleme vermeiden, indem Sie Folgendes einmal ausführen:

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

was diese FATAL machen wird: Rolle "Postgres" existiert nicht weggehen.

248
jwd630

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 postgres oder /usr/local/opt/postgres/bin/createuser -s postgres, wobei nur die neueste Version verwendet wird.
  5. starte postgres server manuell: pg_ctl -D /usr/local/var/postgres start

So starten Sie den Server beim Start

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

Jetzt ist es eingerichtet, melden Sie sich mit psql -U postgres -h localhost an oder verwenden Sie PgAdmin für die GUI.

Standardmäßig hat der Benutzer postgres kein Anmeldekennwort.

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

197
Nitin
createuser postgres --interactive

oder mache einen superuser postgres einfach mit

createuser postgres -s
31

Für mich hat dieser Code funktioniert:

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

es kam von hier: http://talk.growstuff.org/t/fatal-role-postgres-does-not-exist/216/4

16
Kevin Zhao

Zuerst müssen Sie einen Benutzer erstellen:

Sudo -u postgres createuser --superuser $USER

Nach erstellen Sie eine Datenbank:

Sudo -u postgres createdb $USER

Ändern Sie $USER in Ihren Systembenutzernamen.

Sie können die vollständige Lösung sehen hier .

13
ruzenhack

Dies geschieht, wenn Sie initdb mit einem Benutzer ausführen, dessen ID nicht postgres ist, ohne den Benutzernamen postgres mit --username=postgres oder -U postgres anzugeben.

Der Datenbankcluster wird dann mit dem Benutzerkonto des Systems erstellt, mit dem Sie initdb ausgeführt haben, und ihm werden Superuser-Berechtigungen erteilt.

Um dies zu beheben, erstellen Sie einfach einen neuen Benutzer mit dem Namen postgres mit der Option --superuser mit dem Dienstprogramm createuser, das mit Postgres geliefert wird. Das Dienstprogramm befindet sich im Verzeichnis bin von Postgres. 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.

13
isapir

Ich musste $PGUSER deaktivieren:

$ unset PGUSER
$ createuser -s postgres
11
Beau Barker

Das Ausführen dieses Befehls in der Befehlszeile sollte das Problem beheben

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

8
Alex Levine

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
4
softwareplay

Das Löschen der Datenbank postgres spielt keine Rolle. Diese Datenbank ist anfangs leer und hat lediglich den Zweck, dass der Benutzer postgres eine Art "Zuhause" zum Herstellen einer Verbindung hat, falls er eine benötigt.

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

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

Anstelle dieses Befehls: Sudo -u postgres psql -U postgres, wäre es eher im Sinne von postgres.app, nur Folgendes auszugeben: psql, das automatisch eine Verbindung zu einer Datenbank herstellt, die dem Namen Ihres Benutzers entspricht, und mit einem DB-Konto von Der gleiche Name, der zufällig Superuser ist, kann also alles in Bezug auf Berechtigungen tun.

4
Daniel Vérité

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

createuser -s -U $USER
2
Bax

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 als sicherer.

1
Gaurav Neema

Ich blieb in dieser Angelegenheit stecken, nachdem ich am Vortag brew services stop postgresql ausgeführt hatte.
Der folgende Tag: brew services start postgresql würde nicht funktionieren. Dies liegt daran, wie gezeigt, wenn Sie mit Homebrew installieren. postgresql verwendet ein launchd ..., das beim Einschalten des Computers geladen wird.

Auflösung:
brew services start postgresql
Starte deinen Computer neu.

0
Michael Dimmitt

Der Befehl \du gibt Folgendes zurück:

Rollenname = [email protected]_files

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

FEHLER: Rolle "postgres" existiert nicht.

Aber dieser postgres=# \password [email protected]_files läuft gut.

Auch nach Sudo -u postgres createuser -s postgres funktioniert die erste Variante.

0
Adam

Ich glaube 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 nur:

psql

Fahren Sie mit dem Tutorial fort.

Ich würde die allgemeinen Punkte von A.H zum Erstellen des Benutzers postgres und von db 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 (und das Betriebssystem zu fragen, wer versucht, eine Verbindung herzustellen), wird ein Benutzer und eine Datenbank mit dem Benutzer erstellt, der den Initialisierungsprozess ausführt. In diesem Fall war es Ihr normaler Benutzer.

0
Chris Travers