我正在Ubuntu 11.10中学习用户PostgreSQL
和Django
,我发现我需要切换到我在安装PostgreSQL("postgres"
)时创建的用户终端(通过"sudo su postgres"
),以便创建然后访问数据库以便在Django中使用。不幸的是,"postgres"
用户在我的本地文件系统上没有文件写入权限,所以当我尝试做某些事情,比如将模型对象添加到具有图像字段的数据库时,我被阻止了。但是,如果我在终端中切换到我的普通Ubuntu用户名并尝试访问Django的开发服务器上的管理站点,我会收到如下错误:
OperationalError at /admin/
FATAL: Peer authentication failed for user "postgres"
Request Method: GET
Request URL: http://127.0.0.1:8000/admin/
Django Version: 1.3.1
Exception Type: OperationalError
Exception Value:
FATAL: Peer authentication failed for user "postgres"
Exception Location: /usr/local/lib/python2.7/dist-packages/django/db/backends/postgresql_psycopg2/base.py in _cursor, line 140
Python Executable: /usr/bin/python
Python Version: 2.7.2
我正在尝试阅读PostgreSQL文档,让我的普通用户访问我为Django项目创建的数据库,但我无法理解,因为我不理解PostgreSQL之间的关系角色/用户和Ubuntu用户。有人可以向我解释如何在PostgreSQL中为我的数据库提供正常的Ubuntu用户名访问权限吗?我可能需要一个特定的指令列表,因为我试图使用PostgreSQL文档将它拼凑在一起,我完全迷失了。
答案 0 :(得分:9)
cfedermann是对的;这是以下问题的重复:
Django connection to PostgreSQL: "Peer authentication failed"
,解决方案是一样的。在我的Django项目的'settings.py'文件中,在DATABASES部分下,我的'HOST'被设置为一个空字符串,因为那里有一个内置注释(意思是,由Django开发人员编写的注释),字面意思说,'设置为为localhost清空字符串。'显然这不是真的,因为只有在我明确输入'localhost'后才能在我的默认Linux用户名下连接到我的psql数据库。
我想这里的教训是,对于所有Django其他新手试图在开发中使用postgresql,请确保在'settings.py'文件中输入'LOCALHOST',否则你将不会能够连接到存储在您自己的机器上的psql数据库!
再次感谢cfedermann指出我的答案。
答案 1 :(得分:1)
可能不允许您的普通用户从本地主机登录。如果您的django项目与PG数据库在同一台机器上运行,那么您需要检查pg_ident.conf文件。
基本上你可以设置postgres,以便你的unix用户自动映射到postgre用户,所以当你运行pgsql时它会尝试登录你。你可以阻止用户登录外部IP或本地主机。因此,在摆弄Django设置之前,请先检查这些设置。
ELSE试试这个
好的,你应该这样做
sudo passwd postgres
输入unix postgres用户的密码,然后
su postgres
psql
create database djangodb;
create role djangouser with password 'something';
在settings.py文件中尝试这些用户详细信息。更多关于postgres here
另外
Ident methods和The pg_hba.conf file
这对你有帮助吗?