
Ich versuche, meine PostgreSQL-Datenbank namensCrewDBunter Ubuntu 18.04 LTS aus einem Skript mit dem folgenden Befehl darin:
pg_dump -h localhost -p 5432 -U postgres -w -C -F p -b -v -f ~/Dropbox\/postgres_backup/crewdb.backup.sql crewdb
Ich weiß, dass das Skript, in dem der obige Befehl ausgeführt wird, selbst funktioniert. Wenn ich den obigen Befehl mit -W statt -w ausführe, werde ich nach einem Passwort gefragt und die Sicherung läuft problemlos. Ich versuche, diesen Befehl innerhalb des Skripts zu automatisieren und möchte, dass die Sicherung ohne Aufforderung zur Eingabe eines Passworts, also mit dem Flag -w, durchgeführt wird. Zu diesem Zweck habe ich die folgende Datei erstellt
/home/chh1/.pgpass
Wannls -la ~/.pgpass
-rw------- 1 chh1 chh1 74 Oct 15 10:00 .pgpass
In die Datei .pgpass habe ich den folgenden Text eingefügt:
# Server:Port:Database:Username:Password
*:*:crewdb:postgres:9Gh#$mq
Wenn ich den Befehl ausführe, erhalte ich jedoch die folgende Fehlermeldung und die Sicherung schlägt fehl:
pg_dump -h localhost -p 5432 -U postgres -w -C -F p -b -v -f ~/Dropbox\/postgres_backup/crewdb.backup.sql crewdb
pg_dump: [archiver (db)] connection to database "crewdb" failed: FATAL:
password authentication failed for user "postgres"
password retrieved from file "/home/chh1/.pgpass"
FATAL: password authentication failed for user "postgres"
password retrieved from file "/home/chh1/.pgpass"
Ich wäre sehr dankbar, wenn mir hier jemand den richtigen Weg zeigen könnte!
Antwort1
Die Antwort auf diese Frage wurde gefunden.
Beim Laufen
hexdump -C ~/.pgpass
Ich habe die folgende Ausgabe erhalten:
00000000 23 20 68 6f 73 74 6e 61 6d 65 3a 70 6f 72 74 3a |# hostname:port:|
00000010 64 61 74 61 62 61 73 65 3a 75 73 65 72 6e 61 6d |database:usernam|
00000020 65 3a 70 61 73 73 77 6f 72 64 0a 2a 3a 2a 3a 63 |e:password.*:*:c|
00000030 72 65 77 64 62 3a 70 6f 73 74 67 72 65 73 3a 39 |rewdb:postgres:9|
00000040 47 68 23 24 6d 71 20 0a |Gh#$mq .|
00000048
In der fünften Zeile stand eine 20, die auf ein Leerzeichen am Ende des Passworts, aber vor dem Ende der Zeile verwies, was darauf hindeutet, dass am Ende des Passworts ein Leerzeichen steht, das dort nicht hingehört. Nach dem Entfernen des Leerzeichens wurde der Befehl ohne Passwortabfrage ausgeführt.
Die Antwort auf diese Frage lieferte Daniel Vérité von ServerVault.