我目前正在研究如何使用Django制作基本博客的this教程,但我想使用PostgreSQL数据库而不是sqlite数据库。 Django不会为非sqlite自动创建数据库,而我在创建我的数据库时遇到了麻烦。我以为我已经正确完成了,但每当我尝试同步我的数据库时,我会看到一堆文件路径,然后是错误
"django.db.utils.OperationalError: FATAL: role [username] does not exist"
我试过谷歌搜索问题并尝试了一些我找到的解决方案,但是它们似乎都没有起作用。
提前感谢您提供的任何指导。
答案 0 :(得分:2)
从过去的初学者角度来看,我会更深入 - 首先,关于如何阅读Django错误的说明:
django.db.utils.OperationalError
表示django的数据库实用程序中存在错误(将django连接到不同类型的数据库(如MySQL,Postgres和SQLite)的位),因此db.utils部分。 OperationalErrors是当您尝试运行某些东西时从数据库本身返回的东西,这意味着您可以隔离Django并专注于数据库交互本身。如果Django不存在并且您通过psql(postgres'命令行实用程序)运行相同的命令,您仍然会看到:
FATAL: role [username] does not exist
此外,由于全部大写,您通常可以从数据库中判断它是错误的。关系数据库LOVE CAPS LOCK。
就解决问题而言,错误非常具有自我描述性。您需要查看的是您的settings.py文件(如kmmnbvnr指出的那样)。在数据库配置中,您应该看到用户名和密码。 Postgres抱怨您尝试使用不存在的用户连接到已配置的数据库,因此您需要创建它。以下是使用PSQL而不是使用的sumb命令kmmbvnr的命令:
使用命令行实用程序连接到数据库:
$ psql -d postgres
如果您创建的数据库不是默认的postgres,请使用该数据库代替数据库名称
即。 $ psql -d my_database_name
编辑:在某些操作系统上,如果填写了您的操作系统用户名,则可能需要添加-U <database user>
而不是默认的&#34; postgres&#34;用户名。
即。 $ psql -d postgres -U postgres
(postgres是默认用户)。
CREATE ROLE testrole WITH LOGIN ENCRYPTED PASSWORD 'password';
ALTER ROLE testrole WITH CREATEDB;
grant all privileges on database postgres to testrole;
将testrole和密码更改为您想要的任何内容,只要它们与settings.py中的用户名/密码相匹配即可。请注意&#39; &#39;密码周围,但不是用户名。那些很重要。另请注意,出于安全原因,Postgres对使用内置'postgres'用户进行非管理任务不满意,因此最好创建另一个用户与Django一起使用。此外,关于授予权限的最后几行是有点宽容的,但对于本地测试配置,它将是您最容易的选择。有关生产环境/适当安全性的权限,请参阅Postgres文档。
最后,您可以通过查阅PSQL(linux / mac上的man psql)上的手册页来了解如何使用命令行登录特定用户,从而独立于django进行测试。我相信命令是:
$ psql -d postgres -U testrole -W
-d指定数据库(即mydatabase或postgres)时,-U是要连接的用户,-W表示提示输入密码。
答案 1 :(得分:0)
假设你在linux主机上
sudo su postgres
createuser myuser -P
createdb -O myuser mydb
并确保您拥有settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'mydb',
'USER': 'myuser',
'PASSWORD': '_replace_with_user_password_',
'HOST': '',
'PORT': '',
}
}