pg_dump com sinalizador -w não lê o arquivo .pgpass

pg_dump com sinalizador -w não lê o arquivo .pgpass

Estou tentando fazer backup do meu banco de dados PostgreSQL chamadotripulaçãodbno Ubuntu 18.04 LTS a partir de um script com o seguinte comando:

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

Eu sei que o script em que o comando acima é executado funciona sozinho. Quando executo o comando acima com -W em vez de -w, uma senha é solicitada e o backup prossegue perfeitamente. Estou tentando automatizar este comando dentro do script e quero que o backup prossiga sem solicitar uma senha, portanto, com o sinalizador -w. Para isso criei o seguinte arquivo

/home/chh1/.pgpass

Quandols -la ~/.pgpass

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

Dentro do arquivo .pgpass coloquei o seguinte texto:

# Server:Port:Database:Username:Password

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

No entanto, quando executo o comando, recebo a seguinte saída de erro e o backup falha:

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"

Agradeço muito se alguém aqui puder me colocar no caminho certo!

Responder1

A resposta a esta pergunta foi encontrada.

Ao correr

hexdump -C ~/.pgpass

Eu obtive a seguinte saída:

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

A quinta linha tinha um 20 listado apontando para um espaço no final da senha, mas antes do final da linha, indicando que há um espaço no final da senha que não deveria estar lá. Após remover o espaço, o comando foi executado sem qualquer solicitação de senha.

A resposta a esta pergunta foi fornecida por Daniel Vérité da ServerVault.

informação relacionada