Postgresql

帶有 -w 標誌的 pg_dump 不會從 .pgpass 文件中讀取

  • October 15, 2019

我正在嘗試從包含以下命令的腳本在 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"

我基本上遵循以下過程:

  1. 創建帶有內容的 .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 .

必須刪除此空格,否則它將作為密碼的一部分。

引用自:https://serverfault.com/questions/987997