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
.
中的设置找到它
我使用 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
.