
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.