【问题标题】:django/postgres error:'database XX does not exist'django/postgres 错误:'数据库 XX 不存在'
【发布时间】:2020-10-25 09:02:09
【问题描述】:

我使用 pgAdmin GUI 工具为我的 django 项目创建了一个与 postgres 一起使用的数据库。 pgAdmin 中只有两个数据库,一个是您使用 pgAdmin 开箱即用的默认“postgres”数据库,另一个是我的新数据库 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 中完成了这项工作时,为什么还需要这样做呢?也就是说,为什么我必须创建它两次?平时这样吗?

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

我最初使用 Homebrew 和 pgAdmin 分别安装了 Postgres,但后来它没有在 pgAdmin 上提供默认服务器/数据库,所以我删除了 pgAdmin,卸载了 Postgres,然后从网站下载了 Postgres,似乎安装pgAdmin 与它并排,因为当我打开 pgAdmin 时,它具有默认的服务器/数据库 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)

【问题讨论】:

  • makemigrations 会创建、更改、删​​除表,而不是创建数据库,除非您使用 sqlite3。
  • 是的,当我运行这个命令时,我发现数据库丢失了。
  • 你第二次下载的时候是通过哪个链接获取 Postgres 软件的?

标签: django postgresql pgadmin


【解决方案1】:

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

【讨论】:

  • 我在设置中添加了 'PORT': '5432' 但是当我再次运行 python manage.py makemigrations 时,它说没有检测到任何更改。如何关闭 5433 并将 5432 设为默认值?我也进行了迁移,然后去了 pgAdmin,并且表没有结转,所以它肯定没有与我在创建数据库的地方运行的 createdb 同步。
  • 我运行了 sudo lsof -i tcp:5433 和 5432 但在我再次从 Django 应用程序进行迁移之后没有任何改变。我还需要做点别的吗?
  • 那么 lsof 是否显示 Postgres 服务器在 5432 和 5433 上运行?什么操作系统和版本?你是如何安装 Postgres 的?可以使用 psql 连接到服务器(5432/5433)吗?
  • 我最初使用 Homebrew 和 pgAdmin 分别安装了 Postgres,但后来它没有在 pgAdmin 上提供默认服务器/数据库,所以我删除了 pgAdmin,卸载了 Postgres,然后从网站上下载了 Postgres,并且似乎在它旁边安装了 pgAdmin,因为当我打开 pgAdmin 时,它具有默认的服务器/数据库 postgres。我在 macOS 上,10.14.6。
  • 是的,它显示服务器正在运行。在 5432:命令 PID 用户 FD 类型设备大小/关闭节点名称 postgres 16337 me 5u IPv4 0x7560dce8e7f5XXXX 0t0 TCP localhost:postgresql (LISTEN) postgres 16337 me 6u IPv6 0x7560dce8d26cXXXX 0t0 TCP localhost:postgresql>panLISTEN
猜你喜欢
  • 2015-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-05
  • 2022-08-15
  • 2014-12-09
  • 2014-09-10
相关资源
最近更新 更多