40

我在使用 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"

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

4

4 回答 4

48

我有类似的问题,并通过添加到 settings.py 中的数据库设置来解决这个问题,因此您的数据库设置应如下所示:localhostHOST

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.
        },
}
于 2013-10-27T11:26:09.463 回答
26

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

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

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

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

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

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

于 2013-04-04T08:00:03.933 回答
0

在使用 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 行:“主机所有所有 ::1/128 标识”

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

托管所有::1/128 md5

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

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

于 2017-11-09T19:27:00.613 回答