django/postgres error:'database XX does not exist'

django/postgres error:'database XX does not exist'

我使用 pgAdmin GUI 工具创建了一个数据库,用于我的 django 项目的 postgres。 pgAdmin 中只有两个数据库,默认的 'postgres' db 和我的新数据库 dbfunk。

我正在使用 django 并添加了 postgres 作为我的数据库,并在设置中提供了必要的信息。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'dbfunk',
        'USER': 'postgres',
        'PASSWORD': 'XXXXXX',
        'HOST': 'localhost'
    }
}

但是当我运行

python manage.py makemigrations

它给出了错误,数据库 'dbfunk' 不存在,即使它在 Django 中的 settings.py 中和添加到 pgAdmin 中也是如此。错误全文为:

django.db.utils.OperationalError: FATAL:  database "dbfunk" does not exist

我已经安装了适配器 psycopg2。我也在 Settings.py 中尝试了 'ENGINE': 'django.db.backends.postgresql_psycopg2', 但这没有任何区别。

还有什么我想念的吗?

当我 运行 命令 psql \u 它也只显示那里的 postgres 数据库,而不是这个新数据库 'dbfunk'。

我不知道这是否有帮助,但在安装 postgres 时,提示中的端口号是 5433。

更新:我只是从命令行 运行 createdb dbfunk 并且似乎已经创建了它,因为我现在可以 运行 python manage.py makemigrations。但是,为什么我已经在 pgAdmin 中完成了这些工作,还需要这样做呢?也就是说,为什么我必须创建它两次?这正常吗?

更新 2:遗憾的是,我使用 createdb 从命令行创建的数据库 dbfunk 和 pgAdmin 中的 dbfunk 不同步,迁移不会继续进行,因此我在 pgAdmin 中看不到 django 模型的表.

我最初使用 Homebrew 和 pgAdmin 分别安装了 Postgres,但后来它没有在 pgAdmin 上提供默认值 server/database,所以我删除了 pgAdmin,卸载了 Postgres,然后从网站下载了 Postgres,并且似乎同时安装了 pgAdmin,因为当我打开 pgAdmin 时,它有默认的 server/db postgres。我在 macOS 上,10.14.6.

当我检查 5432 上的端口时,我得到:

COMMAND    PID   USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
postgres 16337 me    5u  IPv4 0x7560dce8e7fXXXX      0t0  TCP localhost:postgresql (LISTEN)
postgres 16337 me   6u  IPv6 0x7560dce8d2XXXXX      0t0  TCP localhost:postgresql (LISTEN)

在 5433 上还有更多条目:

COMMAND    PID     USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
postgres 16809 postgres    4u  IPv6 0x7560dce8e883ed93      0t0  TCP *:pyrrho (LISTEN)
postgres 16809 postgres    5u  IPv4 0x7560dce8e46dXXXX      0t0  TCP *:pyrrho (LISTEN)
pgAdmin4 17043   me   20u  IPv4 0x7560dce8e74cXXXx      0t0  TCP localhost:56820->localhost:pyrrho (ESTABLISHED)
pgAdmin4 17043   me   21u  IPv4 0x7560dce8e74cXXXX       0t0  TCP localhost:57054->localhost:pyrrho (ESTABLISHED)
postgres 17051 postgres   12u  IPv4 0x7560dce8e74cXXXX       0t0  TCP localhost:pyrrho->localhost:56820 (ESTABLISHED)
postgres 17217 postgres   12u  IPv4 0x7560dce8e74cXXXX       0t0  TCP localhost:pyrrho->localhost:57054 (ESTABLISHED)

对于初学者,您没有在 DATABASES 中指定 PORT 。 postgres 的默认端口是 5432,因此如果包含 dbfunk 的数据库集群正在侦听端口 5433,那么 Django 将找不到它。我的猜测是你有两个 postgres 运行 实例,一个在端口 5432 上,另一个在 5433 上。当你这样做时 createdb dbfunk 我猜你又没有指定端口并且数据库是在集群侦听 5432。现在 python manage.py makemigrations 可以使用 DATABASES.

中的设置找到它