2011-11-20 86 views
1

我想讓我的Django站點的數據庫轉儲,但Django的本地dumpdata命令對於大型數據庫來說相當糟糕,所以我想使用pg_dump。爲什麼可以psycopg2連接到我的數據庫,我不能

這工作:

python 
>>> import psycopg2 
>>> psycopg2.connect(database='blah',user='blah',password='blah',host='localhost') 

這不起作用

bash 
# psql -U blah blah 
psql: FATAL: Ident authentication failed for user "blah" 
# pg_dump -U blah blah 
pg_dump: [archiver (db)] connection to database "blah" failed: FATAL: Ident authentication failed for user "blah" 

我搜索的提示,也許我需要/etc/postgresql/9.0/main/pg_hba.conf改變 「標識」 爲 「密碼」。這是一個合理的改變?爲什麼我無法使用任何方法對python psycopg2正常工作進入pg_dump?

+1

您是否嘗試指定與代碼中相同的選項?即'psql -h localhost -u blah -W' – nos

回答

4

如果您在psql/pg_dump命令行上提供-h localhost,它將通過TCP套接字而不是unix套接字進行連接。這些可以在pg_hba.conf中定義不同的身份驗證方法。由於「身份驗證」僅適用於unix套接字,所以肯定會出現這種情況。

將pg_hba.conf更改爲使用「md5」而不是「ident」作爲「本地」行(unix套接字)是合理的,要堅持使用postgresql用戶帳戶中定義的密碼,而不是期望使用unix用戶名來標識postgresql用戶名。

在默認的Debian配置中,認證爲「postgres」的行分開放置,以便您可以根據需要將其他用戶的默認值更改爲md5或信任,只保留一個帳戶。 Istr從Postgres用戶那裏得到了一些關於Debian/Ubuntu默認具有「ident」身份驗證的問題,而不是有用的解釋。

+0

'-h localhost'完成了這個訣竅。謝謝! – krubo

相關問題