django.db.utils.OperationalError: FATAL: database does not exist (postgres / deploy to digitalocean) Django数据库操作出错:致命错误:数据库不存在(postgres/部署到DigitalOcean)

3

我正在尝试使用digital ocean部署一个项目。我按照https://www.digitalocean.com/community/tutorials/how-to-set-up-django-with-postgres-nginx-and-gunicorn-on-ubuntu-16-04上的指示进行操作。 其中的一些重要步骤: 我运行了:

postgres=# CREATE DATABASE jobzumoDB;
CREATE DATABASE

之后:

postgres=# CREATE USER admin WITH PASSWORD '123';
CREATE ROLE
postgres=# GRANT ALL PRIVILEGES ON DATABASE jobzumoDB  TO admin;
GRANT

在settings.py中设置以下内容:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'jobzumoDB',
        'USER':'admin',
        'PASSWORD':'123',
        'HOST':'localhost',
        'PORT':'',
    }

然后尝试运行:

 ~/jobzumo/manage.py makemigrations

并获得:

 File "/home/justin/jobzumo/env/lib/python3.6/site-packages/psycopg2/__init__.py", line 126, in connect
        conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
    django.db.utils.OperationalError: FATAL:  database "jobzumoDB" does not exist

两件事情:

ALLOWED_HOSTS = ['jobzumo.com', '142.93.184.125']

我尚未将jobzumo.com连接到Digital Ocean,但已从我的droplet复制了IP地址。

此外,我运行了以下命令:pip install django gunicorn psycopg2(来自Digital Ocean)。

但是,YouTube上的教程说现在安装psycopg2-binary非常重要,然而,由于该视频偏离了Digital Ocean的教程,所以我没有这样做。

感谢任何帮助,在开始理解Django之后,我没想到部署会这么费脑筋。


1
一个有用的调试步骤是尝试通过cli手动连接到数据库 - 您应该能够这样做:sudo -u postgres psql -d jobzumoDB -U admin -W 123 - nthall
@nthall返回psql:致命错误:用户"admin"的同行身份验证失败 - Justin
抱歉 - 请添加“-h localhost”并重试。 - nthall
1
@nthall,它在列表中被列为'jobzumodb'而不是'jobzumoDB'!在settings.py中更改后,“makemigrations”就可以顺利运行了。谢谢你,你帮了我很大的忙。如果我想学习更多,我只需要阅读有关Postgres数据库的内容吗?这些都是我不熟悉的命令。 - Justin
@user3131132,我对为什么会发生这种情况进行了一些研究,如果您能投票并接受我的答案,我将不胜感激:D - nthall
显示剩余6条评论
2个回答

5

在评论中我们总结出的答案是,当你给Postgres一个未加引号的字符串作为标识符时,它会强制将其转换为小写。详见邮件列表pgsql-general中类似的回答。因此通过命令CREATE DATABASE jobzumoDB;创建的数据库实际名称是jobzumodb。如果要创建名为jobzumoDB的数据库,则需要使用引号,例如CREATE DATABASE "jobzumoDB";


1
太棒了!在找到这个之前我花了很多时间。感谢 @nthall。 - MattG

0

用法:

名称:'jobzumodb',

而不是:

名称:'jobzumoDB',


请用小写字母编写您的答案。此答案已由nthall给出。 - Lucas Grugru

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接