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 1.6 最佳实践: 如何设置django项目的设置(settings.py)和部署文件(requirements.txt)