Ich versuche lediglich, mein vorhandenes Datenbankcluster zu sichern, um ein Upgrade von Postgresql 9.4.8 auf 9.5 durchzuführen. Ich verwende Ubuntu 16.04.
Dieser Beitrag ist mir bekannt:Postgres-Passwortauthentifizierung schlägt fehl. Tatsächlich war es bereits als Lesezeichen gespeichert, seit ich das letzte Mal dieses Problem hatte. Ich behaupte nicht, dass ich über bedeutsame Postgres-Kenntnisse verfüge. Ich verstehe nicht immer, was ein psql-Befehl und was ein bash-Befehl sein soll, und die Blogs und was nicht, die ich gesehen habe, machen mir das nicht immer klar. PG ist nur mein Backend für meine Django-Projekte. Ich verstehe wirklich nicht, wie ich dieses Problem wieder habe.
Mein Ubuntu-Benutzer ist malikarumi. Ich habe zwei Postgres-Benutzer, maikarumi und postgres. Postgres ist der Superuser. Ich habe vor einiger Zeit versucht, malikarumi ebenfalls zum Superuser zu machen, aber das ist anscheinend fehlgeschlagen und nein, ich weiß nicht, warum.
Hier ist mein erster Versuch heute:
malikarumi@Tetuoan2:~$ pg_dumpall > 9-4-backup
pg_dumpall: query failed: ERROR: permission denied for relation pg_authid
pg_dumpall: query was: SELECT oid, rolname, rolsuper, rolinherit,rolcreaterole, rolcreatedb, rolcanlogin, rolconnlimit, rolpassword, rolvaliduntil, rolreplication, pg_catalog.shobj_description(oid, 'pg_authid') as rolcomment, rolname = current_user AS is_current_user FROM pg_authid ORDER BY 2
Das kam als nächstes:
malikarumi@Tetuoan2:~$ pg_dumpall > 9-4-backup -U postgres
Password:
Beachten Sie, dass dort nichts zu sehen ist: keine Hilfe, kein Hinweis darauf, was nicht stimmt oder was man dagegen tun kann.
Password:
Password:
pg_dump: [archiver (db)] connection to database "esselldb" failed: FATAL: password authentication failed for user "postgres"
pg_dumpall: pg_dump failed on database "esselldb", exiting
Dann habe ich es noch einmal mit einem leeren Passwort und einem Semikolon versucht
malikarumi@Tetuoan2:~$ pg_dumpall > 9-4-backup -U postgres;
Password:
pg_dumpall: could not connect to database "template1": fe_sendauth: no password supplied
Beachten Sie, dass das Passwort für psql funktioniert
malikarumi@Tetuoan2:~$ psql -U postgres
Password for user postgres: Note the password works with psql
psql (9.4.8)
Type "help" for help.
Aber der Befehl funktioniert nicht, mit oder ohne Semikolon
postgres=# pg_dumpall > 9-4-backup
postgres-# pg_dumpall > 9-4-backup;
ERROR: syntax error at or near "pg_dumpall"
LINE 1: pg_dumpall > 9-4-backup
Das funktioniert
malikarumi@Tetuoan2:/etc/postgresql/9.4/main$ sudo cat pg_hba.conf
[sudo] password for malikarumi:
Offensichtlich ist dies der Unix-Benutzer, nicht der Datenbankbenutzer. Aber es ist und war schon immer dasselbe Passwort.
Ich habe dies geändert
# Database administrative login by Unix domain socket
local all postgres md5
zum Peer, wie im vorherigen Beitrag vorgeschlagen (nochmals – wie könnte es wieder geändert werden?!)
Aber ich konnte postgres nicht neu starten
malikarumi@Tetuoan2:/etc/postgresql/9.4/main$ pg_ctl stop
pg_ctl: command not found
malikarumi@Tetuoan2:/etc/postgresql/9.4/main$ cd ~
malikarumi@Tetuoan2:~$ pg_ctl stop
pg_ctl: command not found
Es hat auch von psql aus nicht funktioniert
postgres=# pg_ctl stop
postgres-# pg_ctl stop;
ERROR: syntax error at or near "pg_ctl"
LINE 1: pg_ctl stop
^
postgres=#
Aber zumindest lässt mich psql noch rein …
Also habe ich die ganze Maschine neugestartet und es noch einmal versucht. Du weißt, was passiert ist
malikarumi@Tetuoan2:~$ pg_dumpall > 9-4-backup -U postgres
pg_dumpall: could not connect to database "template1": FATAL: Peer authentication failed for user "postgres"
Ich habe es also erfolgreich geändert, aber ich bekomme es immer noch nicht zum Laufen. HINWEIS: Ich wurde NICHT nach meinem Passwort gefragt!
Dann habe ich dies versucht
malikarumi@Tetuoan2:~$ su postgres
Password: the right one
su: Authentication failure
malikarumi@Tetuoan2:~$ su postgres
Password: a blank one
su: Authentication failure
Und jetzt sind Sie auf dem neuesten Stand. Übrigens habe ich mir die offiziellen Postgres-Dokumente schon oft angesehen und finde sie dicht und kaum verständlich. Wenn Sie auch ein gutes Basis-Tutorial für einen Nicht-DB-Benutzer wie mich kennen, wäre das hilfreich. Danke.
Antwort1
Angesichts des Kontexts ist mit allen genannten Fehlern zu rechnen, mit Ausnahme eines:
malikarumi@Tetuoan2:~$ pg_dumpall > 9-4-backup -U postgres
Password:
Hier melden Sie einen Fehler, aber in der anderen Situation unten:
malikarumi@Tetuoan2:~$ psql -U postgres
Password for user postgres: Note the password works with psql
Sie melden einen Erfolg.
Aber das ergibt keinen Sinn. Das gleiche Passwort muss pg_dumpall
in dem von Ihnen genannten Kontext genauso gut funktionieren, nämlich:
- Das Authentifizierungsschema ist auf „
md5
in“ eingestelltpg_hba.conf
(bevor Sie es im Rest des Beitrags ändern). - Der Zieldatenbankbenutzer ist durch die
-U postgres
Option Postgres. - Der Befehl wird von der Shell Ihres eigenen Unix-Benutzers aufgerufen
malikarumi
.
Nachdem Sie das Authentifizierungsschema erfolgreich in peer
(letzter Teil Ihrer Frage) geändert haben, besteht der Fehler darin, dass Sie es su
anstelle von versuchen sudo
, wobei letzteres die empfohlene Methode unter Ubuntu ist.
Verwenden Sie diesen Befehl an der Shell-Eingabeaufforderung:
malikarumi@Tetuoan2:~$ sudo -u postgres pg_dumpall >9-4-backup
Sie werden nach einem Passwort gefragt und es wird etwa Folgendes angezeigt:
[sudo] password for malikarumi:
Beachten Sie, dass erwartet wirdIhr Passwort, dasselbe, das Sie beim Öffnen Ihrer Sitzung unter dem malikarumi
Namen verwenden, im Gegensatz zum Passwort von Postgres oder einem Datenbankpasswort.
sudo -u postgres somepostgrescommand
ist nur eine Variante dessen, was sudo someadmincommand
Sie tun dürfen, wenn Sie der Administrator dieser Ubuntu-Workstation sind.