在过去从初学者的角度遇到过这个问题,我将更深入地讨论——首先,关于如何阅读 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 的命令,而不是 kmmbvnr 使用的 sudo 命令:
使用命令行实用程序连接到数据库:
$ psql -d postgres
如果您创建的数据库不是默认的 postgres,请使用它作为数据库名称,
即$ psql -d my_database_name
编辑:在某些操作系统上,如果 -U <database user> 填写您的操作系统用户名而不是默认的“postgres”用户名,则您可能需要添加它。
即$ 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 中的用户名/密码匹配即可。请注意密码周围的“”,而不是用户名周围的“”。这些很重要。另请注意,出于安全原因,Postgres 不赞成将内置的“postgres”用户用于非管理任务,因此最好创建另一个用户以与 Django 一起使用。此外,关于授予权限的最后几行有点宽松,但对于本地测试配置,这将是您最容易的选择。有关生产环境的权限/适当的安全性,请参阅 Postgres 文档。
最后,您可以独立于 django 进行测试,方法是参考 PSQL 上的手册页(linux / mac 上的 man psql),了解如何使用命令行以特定用户登录。我相信命令是:
$ psql -d postgres -U testrole -W
-d 指定数据库(即 mydatabase 或 postgres),-U 是要连接的用户,-W 表示提示输入密码。