Authentication
Psql 使用 .pgpass 文件,但 pg_dump 沒有,它也沒有使用正確的密碼進行連接
使用以下命令:
% 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”也不是。