2011-11-20 80 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

相关问题