Django 设置:psycopg2.OperationalError: FATAL: Peer authentication failed for user "indivo"

Posted

技术标签:

【中文标题】Django 设置:psycopg2.OperationalError: FATAL: Peer authentication failed for user "indivo"【英文标题】:Django setting : psycopg2.OperationalError: FATAL: Peer authentication failed for user "indivo" 【发布时间】:2013-03-26 04:39:29 【问题描述】:

我在使用 POSTGRESQL 的 Django 项目设置中遇到问题。

这是我的setting.py数据库设置

DATABASES = 
    'default':
        'ENGINE':'django.db.backends.postgresql_psycopg2', # '.postgresql_psycopg2', '.mysql', or '.oracle'
        'NAME':'indivo', # Required to be non-empty string
        'USER':'indivo', # Required to be non-empty string
        'PASSWORD':'ritvik',
        'HOST':'', # Set to empty string for localhost.
        'PORT':'', # Set to empty string for default.
        ,

现在在 postgres 后端我所做的是。

rohit@rohit-desktop:~$ sudo su - postgres
postgres@rohit-desktop:~$ createuser --superuser indivo   # create a super user indivo
postgres@rohit-desktop:~$ psql  # open psql terminal 
psql (9.1.8)
Type "help" for help.

postgres=# \password indivo  # set the password ritvik
Enter new password: 
Enter it again: 
postgres=# \q   #logout 
postgres@rohit-desktop:~$ createdb -U indivo -O indivo indivo  #create db indivo 

不幸的是,当我尝试同步数据库时,我收到了错误。

psycopg2.OperationalError: FATAL:  Peer authentication failed for user "indivo"

请帮我看看我在这里做错了什么。

【问题讨论】:

这里回答了重复的问题:[Django connection to PostgreSQL: “Peer authentication failed”][1] [1]: ***.com/questions/8167602/… 【参考方案1】:

我有类似的问题,并通过在settings.py 中将localhost 添加到数据库HOST 设置中,使用this answer 解决了它,因此您的数据库设置应如下所示:

DATABASES = 
    'default':
        'ENGINE':'django.db.backends.postgresql_psycopg2', # '.postgresql_psycopg2', '.mysql', or '.oracle'
        'NAME':'indivo', # Required to be non-empty string
        'USER':'indivo', # Required to be non-empty string
        'PASSWORD':'ritvik',
        'HOST':'localhost', # <- Changed from empty string to localhost
        'PORT':'', # Set to empty string for default.
        ,

【讨论】:

感谢您的回答,它也对我有用;尽管评论说# Set to empty string for localhost. :(【参考方案2】:

默认情况下,在许多 Linux 发行版中,客户端身份验证设置为“对等”,以便 Unix 套接字连接到数据库。这是在 postgresql 的 pg_hba.conf 配置文件中设置的。 psycopg2 python 库文档指出:

- *host*:数据库主机地址(如果未提供,则默认为 UNIX 套接字)

因此,如果您将主机选项留空,您的脚本将尝试连接并使用 Unix 用户名:密码进行身份验证。要修复,您可以:

    将“主机”选项明确设置为 127.0.0.1 到您粘贴到问题中的配置代码中。 修改 pg_hba.conf 文件以使用 md5 进行套接字连接,因此它使用存储在 postrgres DB 用户存储中的用户名和密码(不推荐,因为这可能会破坏系统用户的身份验证)

【讨论】:

也许添加信息,您必须在编辑 pg_hba.conf:sudo service postgresl restart 后重新启动 postgresql 服务器【参考方案3】:

您需要设置pg_hba.conf 以对感兴趣的用户、数据库和源IP 使用md5 身份验证。请参阅文档的client authentication 章节。

在 Stack Overflow 上搜索 pg_hba.conf 以获取更多信息。

【讨论】:

请帮我如何在 postgresql 9.0 中设置 @masterofdestiny 老实说,您真的应该阅读手册。它深入涵盖了所有这些。在 Ubuntu 上,pg_hba.conf 位于 /etc/postgresql/9.1/main/pg_hba.conf 中。否则……都是手册,阅读the docs on pg_hba.conf 这一行为我做了:host all all 127.0.0.1/32 md5【参考方案4】:

在使用 Django 项目设置 postgresql 数据库时,我也遇到了类似的问题。

我的系统正在运行带有 postgresql 版本 10 的 RHEL CentOS 7。我搜索了很多,但直到我在 /var/lib/pqsql/10/data/log/postgresql*.log 看到日志后才真正找到正在发生的事情

2017-11-10 00:31:40.499 IST [14129] 详细信息:连接匹配 pg_hba.conf 第 85 行:“host all all ::1/128 ident”

所以我只是更改了文件 /var/lib/pgsql/10/data/pg_hba.conf 中的特定行: 从 host all all ::1/128 ident

托管所有所有 ::1/128 md5

我可以使用 manage.py migrate 创建数据库和表

感谢所有帮助我找到此解决方案的人。特别是 @juliocesar 和 postgresql 客户端身份验证的官方文档

【讨论】:

以上是关于Django 设置:psycopg2.OperationalError: FATAL: Peer authentication failed for user "indivo"的主要内容,如果未能解决你的问题,请参考以下文章

Django setting设置 常用设置

Django 设置默认日志记录

django 默认时区设置

django前端怎么设置 静态文件路径

Django 1.6 最佳实践: 如何设置django项目的设置(settings.py)和部署文件(requirements.txt)

我无法更改主 Django 项目设置文件