pg_dump con el indicador -w no lee el archivo .pgpass

pg_dump con el indicador -w no lee el archivo .pgpass

Estoy intentando hacer una copia de seguridad de mi base de datos PostgreSQL llamadatripulacióndben Ubuntu 18.04 LTS desde un script con el siguiente comando:

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

Conozco el script en el que se ejecuta el comando anterior y funciona. Cuando ejecuto el comando anterior con -W en lugar de -w, se me solicita una contraseña y la copia de seguridad se realiza correctamente. Estoy intentando automatizar este comando dentro del script y quiero que la copia de seguridad continúe sin solicitar una contraseña, por lo tanto con el indicador -w. Para ello creé el siguiente archivo

/home/chh1/.pgpass

Cuandols -la ~/.pgpass

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

Dentro del archivo .pgpass coloqué el siguiente texto:

# Server:Port:Database:Username:Password

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

Sin embargo, cuando ejecuto el comando, aparece el siguiente error y la copia de seguridad falla:

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"

¡Aprecio mucho si alguien aquí puede ponerme en el camino correcto!

Respuesta1

Se ha encontrado la respuesta a esta pregunta.

al correr

hexdump -C ~/.pgpass

Obtuve el siguiente resultado:

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

La quinta línea tenía un 20 apuntando a un espacio al final de la contraseña pero antes del final de la línea, lo que indica que hay un espacio al final de la contraseña que no debería estar allí. Después de eliminar el espacio, el comando se ejecutó sin solicitar ninguna contraseña.

La respuesta a esta pregunta fue proporcionada por Daniel Vérité de ServerVault.

información relacionada