-w フラグ付きの pg_dump は .pgpass ファイルから読み取りません

-w フラグ付きの pg_dump は .pgpass ファイルから読み取りません

私はPostgreSQLデータベースをバックアップしようとしていますクルーdbUbuntu 18.04 LTS では、次のコマンドを含むスクリプトから実行します。

pg_dump -h localhost -p 5432 -U postgres -w -C -F p -b -v -f ~/Dropbox\/postgres_backup/crewdb.backup.sql crewdb

上記のコマンドを実行するスクリプト自体は機能することがわかっています。上記のコマンドを -w ではなく -W で実行すると、パスワードの入力が求められ、バックアップは問題なく続行されます。スクリプト内でこのコマンドを自動化し、パスワードの入力を要求せずにバックアップを続行したいので、-w フラグを使用します。このために、次のファイルを作成しました。

/home/chh1/.pgpass

いつls -la ~/.pgpass

-rw------- 1 chh1 chh1 74 Oct 15 10:00 .pgpass

.pgpass ファイル内に次のテキストを配置しました。

# Server:Port:Database:Username:Password

*:*:crewdb:postgres:9Gh#$mq

ただし、コマンドを実行すると次のエラー出力が表示され、バックアップは失敗します。

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"

ここで誰かが私を正しい道に導いてくれるなら、とても感謝します!

答え1

この質問に対する答えは見つかりました。

実行中

hexdump -C ~/.pgpass

次のような出力が得られました:

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

5 行目には、パスワードの末尾のスペースを指しているが行末の前にある 20 がリストされていました。これは、パスワードの末尾に、あってはならないスペースがあることを示しています。スペースを削除すると、パスワードの入力を求めるプロンプトが表示されずにコマンドが実行されました。

この質問への回答は、ServerVault の Daniel Vérité 氏から提供されました。

関連情報