Ausführen des PostgreSQL-Servers unter Void Linux. Nach der Installation lief initdb als Betriebssystembenutzer „postgres“:

[user@host]$ sudo -u postgres -i $ initdb -D "/var/lib/postgresql/data" 

Empfangene Ausgabe:

Verzeichnis / var / lib / postgresql / data erstellen … ok Unterverzeichnisse erstellen … ok Standard-max_connections auswählen … 100 Standard-Shared-Puffer auswählen … 128 MB Dynamic Shared auswählen Speicherimplementierung … posix Konfigurationsdateien erstellen … ok Bootstrap-Skript ausführen … ok Post-Bootstrap-Initialisierung durchführen … Gebietsschema: LC_MESSAGES kann nicht auf Standardgebietsschema gesetzt werden: Keine solche Datei oder kein solches Verzeichnis ok Daten auf Festplatte synchronisieren … ok

WARNUNG: Aktivieren der „Vertrauens“ -Authentifizierung für lokale Verbindungen Sie können dies ändern, indem Sie pg_hba.conf bearbeiten oder beim nächsten Mal die Option -A oder –auth-local und –auth-host verwenden Sie führen initdb aus.

Erfolgreich. Sie können den Datenbankserver jetzt mit folgendem Befehl starten: pg_ctl -D / var / lib / postgresql / data -l Protokolldatei starten

Ich habe dann den Dienst erstellt, „postgres“ den Besitz erteilt und ihn gestartet:

[user@host]$ ln -s /etc/sv/postgresql /var/service [user@host]$ sudo chown postgres: /var/service/postgresql [user@host]$ sudo sv start postgresql [user@host]$ ls -l /var/service/postgresql lrwxrwxrwx 1 postgres postgres 18 nov 2 17:05 /var/service/postgresql -> /etc/sv/postgresql 

Wird ausgeführt:

[user@host]$ sudo -u postgres psql ... 

gibt mir den folgenden Fehler:

psql: FATAL: role "postgres" does not exist 

Ich habe versucht, das Eigentum an /etc/sv/postgresql bis „postgres“, aber kein Glück.

Dies waren meine Quellen:

https://wiki.voidlinux.eu/PostgreSQL

PostgreSQL-Fehler: Schwerwiegend: Rolle „Benutzername“ existiert nicht

Ich weiß nicht, was ich als nächstes tun soll.

BEARBEITEN: Stolperte über psql: FATAL: Rolle „postgres“ nicht existieren . psql -l kann nicht ausgeführt werden, da ich denselben Fehler erhalte, unabhängig davon, welchen Benutzer ich psql als.

Kommentare

  • Teilen Sie uns mit, welche Version von Postgres Sie installieren möchten und woher Sie das Paket haben. Die Fehlermeldung ist klar genug: role "postgres" does not exist: Es gibt keine Datenbankrolle mit dem Namen " postgres ". Ist es die einzige Postgres-Installation auf demselben Computer? (Sie stellen also sicher, dass Sie eine Verbindung zur richtigen Instanz herstellen?) Wenn ja, lautet die Frage: Welche Datenbankrolle wird von Ihrer Installation eingerichtet? Ich kenne ' Void Linux oder den XPBS-Paketmanager nicht genug, um mehr zu sagen. Könnte besser für superuser.SE oder unix.SE geeignet sein.
  • Die Version ist postgresql-9.6.10_1. Ja, es ist ' die einzige Installation von PostgreSQL auf meinem System, und es wird nur eine Instanz des Servers ausgeführt. Soll ich die Frage dann verschieben? Ich weiß nicht, ' …
  • Ich bin mir nicht sicher, ob es hier VOID Linux- oder XPBS-Experten gibt … Der Schlüssel ist, den Namen des zu finden Postgres-Rolle, die von initdb erstellt wurde, und anschließende Verbindung mit dem gleichnamigen Betriebssystembenutzer, um Zugriff durch die " trust " Authentifizierungsmethode. Offensichtlich nicht " postgres " (was die vernünftige Standardeinstellung wäre).
  • Ich dachte mir das auch, aber ich ' hat die Rolle nicht gefunden. Wie ich in der Frage erwähnt habe, kann ich ' t psql überhaupt nicht verwenden, sodass ich ' die vorhandenen Rollen nicht auflisten kann. Gibt es vielleicht etwas Relevantes in der Datei postgresql.conf? Was sollte ich suchen? Ich ' habe die Rolle gepackt und session_replication_role = 'origin' erhalten. Ich glaube, das wird nicht viel genutzt.
  • :%s/XPBS/XBPS/g

Antwort

Keine vollständige Antwort, aber das Handbuch zu initdb hier :

-U username
--username= username

Wählt den Benutzernamen des Datenbank-Superusers aus. Der Standardwert ist der Name des effektiven Benutzers, der initdb ausführt. Es ist wirklich nicht wichtig, wie der Name des Superusers lautet, aber man kann den üblichen Namen postgres beibehalten, auch wenn der Name des Betriebssystembenutzers unterschiedlich ist.

Bedeutung …

  1. Beim Ausführen von initdb als Betriebssystembenutzer postgres ist die anfängliche DB-Superuser-Rolle auch postgres – in Standard-Postgres. Ich habe von Systemen gehört, die diese Regel verbiegen …

  2. Sie sollten in der Lage sein, den Namen postgres mit --username=postgres für den ersten Superuser – es sei denn, Ihr Paket hat dies ernsthaft durcheinander gebracht.

Kommentare

  • Wow Das hat mich in die richtige Richtung gelenkt. Ich wusste, dass ich das Flag -U irgendwo gesehen habe und es war von hier: stackoverflow.com/questions/50746147/… Ich habe möglicherweise die Antwort von Laurenz ' dort falsch verstanden, aber ich habe initdb -U UTF8 -D /var/lib/postgresql/data ausgeführt und weiß was Die anfängliche DB-Superuser-Rolle war. Wie auch immer, ich habe mein gesamtes System wegen Erschöpfung fast zum Absturz gebracht. Ein ziemlich produktiver Tag. Vielen Dank für Ihr Engagement Erwin, Ihre Hilfe wird sehr geschätzt.
  • @Jakov: -U UTF8. Autsch. Sollte -E UTF8 sein, nehme ich an? Entschuldigen Sie Ihren verlorenen Tag aufgrund eines hinterhältigen, durcheinandergemischten Briefes. Andererseits: Wenn Sie in der Frage zunächst Ihren tatsächlichen Befehl gezeigt hätten, hätten wir möglicherweise den halben Tag gespart …

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.