我在使用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
不幸的是,当我尝试syncdb时,我收到错误。
psycopg2.OperationalError: FATAL: Peer authentication failed for user "indivo"
请帮助我解决我在这里做错的事。
答案 0 :(得分:43)
我遇到了类似的问题,并通过将localhost
添加到settings.py中的数据库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', # Set to empty string for localhost.
'PORT':'', # Set to empty string for default.
},
}
答案 1 :(得分:26)
默认情况下,在许多Linux发行版中,客户端身份验证设置为“peer”,用于与数据库的Unix套接字连接。这是在postgresql的pg_hba.conf
配置文件中设置的。 psycopg2 python库文档声明:
- * host *:数据库主机地址(如果未提供,则默认为UNIX套接字)
因此,如果您将主机选项留空,您的脚本将尝试连接并使用Unix用户名:密码进行身份验证。要修复,您可以:
pg_hba.conf
文件以使用md5进行套接字连接,以便它使用存储在postrgres数据库用户存储中的用户名和密码(不建议这样做,因为这可能会破坏系统用户的身份验证)。答案 2 :(得分:6)
您需要将pg_hba.conf
设置为对感兴趣的用户,数据库和源IP使用md5
身份验证。请参阅文档的client authentication章节。
在Stack Overflow上搜索pg_hba.conf
以获取更多信息。
答案 3 :(得分:0)
在使用Django项目设置postgresql数据库时,我也遇到了类似的问题。
我的系统正在运行带有postgresql版本10的RHEL CentOS 7.我搜索了很多但实际上找不到发生了什么,直到我看到log = ///dib/pqsql/10/data/log/postgresql*.log
2017-11-10 00:31:40.499 IST [14129]详细信息:连接匹配pg_hba.conf第85行:"主持所有:: 1/128 ident"
所以我刚刚更改了文件/var/lib/pgsql/10/data/pg_hba.conf中的特定行: 从 主持所有:: 1/128 ident
到
主持所有:: 1/128 md5
我可以创建数据库&使用manage.py migrate的表
感谢所有帮助我找到此解决方案的人。特别是@juliocesar和postgresql客户端身份验证的官方文档