Authentication

Psql 使用 .pgpass 文件,但 pg_dump 沒有,它也沒有使用正確的密碼進行連接

  • August 8, 2014

使用以下命令:

% pg_dump -h postgres.cs.host.ca -p 5433 -n _cscf_subscription -Fc -f ~/old.dump odyssey_prod
Password: 
pg_dump: [archiver (db)] connection to database "cs-rsub" failed: FATAL:  password authentication failed for user "cs-rsub"
FATAL:  password authentication failed for user "cs-rsub"

然而 psql 工作正常:

% psql -U _cscf_subscription -d odyssey_prod -h postgres.cs.host.ca -p 5433
psql (9.3.4, server 9.2.4)
SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256)
Type "help" for help.

postgres=> \q

奇怪的是 pg_dump 不像 psql 那樣簡單地使用 .pgpass 文件,但是即使將 .pgpass 文件中儲存的密碼粘貼並手動輸入到 pg_dump 密碼提示符中仍然無法進行身份驗證。我使用相同的帳戶、相同的角色和相同的主機。

這裡可能出了什麼問題?

如果版本很重要:

SELECT version();通過工作 psql 執行返回:

PostgreSQL 9.2.4 on x86_64-unknown-linux-gnu, compiled by gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3, 64-bit

並且pg_dump --version是:

pg_dump (PostgreSQL) 9.3.4

我懷疑這會很重要,但是psql --version

psql (PostgreSQL) 9.3.4

對出了什麼問題有任何想法嗎?

您不是“使用相同的帳戶、相同的角色和相同的主機”,甚至沒有關閉。

在您的pg_dump通話中,您不提供任何使用者名 (-U) 或數據庫 (-d),只提供主機名 (-h) 和架構 (-n)。所以pg_dump使用你的系統使用者作為數據庫使用者名數據庫來連接。從錯誤資訊來看,您的系統使用者似乎是“cs-rsub”。

psql通話中,您同時提供使用者名 (-U) 和數據庫 (-d),“cs-rsub”也不是。

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