1

我正在 Ubuntu 11.10 中学习用户PostgreSQLDjango一起使用,我发现我需要切换到我"postgres"在终端(通过"sudo su postgres")中安装 PostgreSQL()时创建的用户,以便创建然后访问数据库以在 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 用户。有人可以向我解释一下如何让我的普通 Ubuntu 用户名访问我在 PostgreSQL 中的数据库吗?我可能需要一个特定的指令列表,因为我试图使用 PostgreSQL 文档将它拼凑在一起,但我完全迷失了。

4

2 回答 2

9

cfedermann 是正确的;这是问题的副本:

Django 与 PostgreSQL 的连接:“对等身份验证失败”

解决方案是一样的。在我的 Django 项目的“settings.py”文件中,在 DATABASES 部分下,我的“HOST”被设置为空字符串,因为那里有一个内置注释(意思是 Django 开发人员编写的注释),字面意思是说,“设置为本地主机的空字符串。” 显然这不是真的,因为只有在我明确输入“localhost”之后,我才能以我的默认 Linux 用户名连接到我的 psql 数据库。

我想这里的教训是,对于所有试图在开发中与 postgresql 一起使用的 Django 其他新手,请确保在“settings.py”文件中输入“LOCALHOST”,否则将无法连接到存储在您自己机器上的 psql 数据库!

再次感谢 cfedermann 指出我的答案。

于 2012-04-18T12:56:57.600 回答
1

Postgres 身份说明

可能不允许您的普通用户从本地主机登录。如果您的 django 项目与 PG 数据库在同一台机器上运行,那么您需要检查 pg_ident.conf 文件。

基本上,您可以设置 postgres 以便您的 unix 用户自动映射到 postgre 用户,因此当您运行 pgsql 时它会尝试登录。您可以阻止用户登录外部 IP 或本地主机。因此,在摆弄 Django 设置之前,请先检查这些设置。

否则试试这个

好吧,你应该这样做

sudo passwd postgres 

然后输入 unix postgres 用户的密码

su postgres
psql
create database djangodb;
create role djangouser with password 'something';

在您的 settings.py 文件中尝试这些用户详细信息。更多关于 postgres 的信息在这里

Ident 方法pg_hba.conf 文件

这对你有帮助吗?

于 2012-04-17T10:00:06.687 回答