
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.