帶有 -w 標誌的 pg_dump 不會從 .pgpass 文件中讀取
我正在嘗試從包含以下命令的腳本在 Ubuntu 18.04 LTS 上備份我的名為 crowddb 的 PostgreSQL 數據庫:
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"
我基本上遵循以下過程:
- 創建帶有內容的 .pgpass 文件
*:*:crewdb:postgres:9Gh#$mq
2)使用命令設置權限
sudo chmod 600 .pgpass
3)將文件所有者設置為您登錄時使用的同一使用者:
sudo chown chh1:chh1 .pgpass
4)設置PGPASSFILE環境變數:
export PGPASSFILE='/home/chh1/.pgpass'
現在檢查時
psql -h localhost -U postgres crewdb
我收到類似的錯誤:
psql: 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"
以下是我的 pg_hba.conf 文件中的設置:
# Database administrative login by Unix domain socket local all postgres md5 # TYPE DATABASE USER ADDRESS METHOD # "local" is for Unix domain socket connections only local all all peer # IPv4 local connections: host all all 127.0.0.1/32 md5 # IPv6 local connections: host all all ::1/128 md5 # Allow replication connections from localhost, by a user with the # replication privilege. local replication all peer host replication all 127.0.0.1/32 md5 host replication all ::1/128 md5
如果有人可以讓我走上正確的道路,我將不勝感激!
的十六進制轉儲
.pgpass
顯示20
在密碼之後和行尾之前有空格字元 ( ):47 68 23 24 6d 71 20 0a |Gh#$mq .
必須刪除此空格,否則它將作為密碼的一部分。