django.db.utils.OperationalError: FATAL: 角色“django”不存在

新手上路,请多包涵

我按照 Digital Ocean 上的本教程在 Ubuntu 16.04 服务器上安装 PostgreSQL 9.5 以与 Django 1.10 一起使用。

一切顺利,但我无法让我的 Django 应用程序连接到数据库(或者看起来如此)。应用程序和数据库在同一台服务器上。

以下是一些设置、配置和报告:

我得到的错误:

 File "/home/mathieu/web/agencies/lib/python3.5/site-packages/psycopg2/__init__.py", line 164, in connect
conn = _connect(dsn, connection_factory=connection_factory, async=async)
django.db.utils.OperationalError: FATAL:  role "django" does not exist

我的 Django 项目的数据库设置:

 DATABASES = {
'sqlite3': {
    'ENGINE': 'django.db.backends.sqlite3',
    'NAME': os.path.join(BASE_DIR, 'db.sqlite3')
},
'default': {
    'ENGINE': 'django.db.backends.postgresql',
    'NAME': 'agencies',
    'USER': 'django',
    'PASSWORD': '<password>',
    'HOST': 'localhost',
    'PORT': '5432',
}}

hba_文件

postgres=# SHOW hba_file;
hba_file
--------------------------------------
/etc/postgresql/9.5/main/pg_hba.conf

它的内容(无论如何,相关部分):

 # TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local   replication     postgres                                peer
#host    replication     postgres        127.0.0.1/32            md5
#host    replication     postgres        ::1/128                 md5

psql中的用户和数据库

postgres=# \du
                               List of roles
Role name |                         Attributes                         | Member of
-----------+------------------------------------------------------------+-----------
django    |                                                            | {}
postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS | {}

postgres=# \l
                              List of databases
Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
agencies  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =Tc/postgres         +
                                                            |  postgres=CTc/postgres+
                                                            |  django=CTc/postgres
postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
          |          |          |             |             |  postgres=CTc/postgres
template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
          |          |          |             |             | postgres=CTc/postgres

我在虚拟机上执行了完全相同的步骤(我应该说运行的是 Linux Mint),一切都很顺利……

我这辈子都弄不清楚哪里出了问题。

原文由 Mathieu Dhondt 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 629
2 个回答

如果您在本地(和正在运行)安装了 postgres 并且同时尝试占用同一端口的 docker 容器,您可能会看到此错误。

如果本地实例首先启动并且占用了 docker 镜像也在尝试使用的端口,则 docker 不一定会告诉您这一点。

当您尝试运行需要数据库的 django 或其他 ./manage.py 命令时,您会看到相同的错误,因为应用程序看不到您要查找的数据库。

在这种情况下,您可以通过停止服务器、单击 Server Settings 并更改端口来更改本地安装的 postgres 上的端口。您必须更新 settings.py 依赖于该旧端口的任何应用程序。

根据我的经验,执行此操作后,如果您重新启动 docker db 容器,您将不会再看到此错误。

原文由 Rob 发布,翻译遵循 CC BY-SA 4.0 许可协议

请参阅链接 单击此处。它被解释。

您的设置有

‘用户’:’django’,

但正如错误所说用户不存在,这意味着您还没有创建用户。

只需进入 psql 的交互式会话并输入这些命令。

 CREATE DATABASE agencies;
CREATE USER django WITH PASSWORD 'password';
ALTER ROLE django SET client_encoding TO 'utf8';
ALTER ROLE django SET default_transaction_isolation TO 'read committed';
ALTER ROLE django SET timezone TO 'Asia/Kolkata';

GRANT ALL PRIVILEGES ON DATABASE agencies TO django;
\q

然后在settings.py

‘密码’:’密码’,

密码不应包含在 < > 内。

原文由 Astik Anand 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题