pg_dump mit -w-Flag liest nicht aus der .pgpass-Datei

pg_dump mit -w-Flag liest nicht aus der .pgpass-Datei

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.

verwandte Informationen