django test app error - 创建测试数据库时出错:创建数据库的权限被拒绝

新手上路,请多包涵

当我尝试使用命令测试任何应用程序时(当我尝试使用使用此命令的结构部署 myproject 时,我注意到了这一点):

 python manage.py test appname

我收到此错误:

 Creating test database for alias 'default'...
Got an error creating the test database: permission denied to create database

Type 'yes' if you would like to try deleting the test database 'test_finance', or 'no' to cancel

syncdb 命令似乎有效。我在 settings.py 中的数据库设置:

 DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': 'finance',                      # Or path to database file if using sqlite3.
        'USER': 'django',                      # Not used with sqlite3.
        'PASSWORD': 'mydb123',                  # Not used with sqlite3.
        'HOST': '127.0.0.1',                      # Set to empty string for localhost. Not used with sqlite3.
        'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
    }
}

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

阅读 673
2 个回答

当 Django 运行测试套件时,它会创建一个新数据库,在您的情况下是 test_finance 。用户名为 django 的 postgres 用户无权创建数据库,因此出现错误消息。

当您运行 migratesyncdb 时,Django 不会尝试创建 finance 数据库,因此您不会收到任何错误。

您可以通过在 postgres shell 中以超级用户身份运行以下命令来向 django 用户添加 createdb 权限( 对此堆栈溢出答案 的提示)。

 => ALTER USER django CREATEDB;

注意: ALTER USER <username> CREATEDB; 命令中使用的用户名需要与 Django 设置文件中的数据库用户匹配。在这种情况下,原始发布者的用户为 django 上述答案。

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

由于错误表明用户没有足够的权限来创建数据库。 Django 在测试期间会创建一个单独的数据库,这样我们原来的开发数据库就不会受到影响。

我们可能需要通过 Postgres shell 授予权限。

 DATABASES = {
'default': {
    'ENGINE': 'django.db.backends.postgresql_psycopg2',
    'NAME': config('DB_NAME'),
    'USER': "myuser",
    'PASSWORD': config('DB_PASSWORD'),
    'HOST': config('DB_HOST'),
    'PORT': config('DB_PORT'),

    'TEST': {
        'NAME': 'test_nofoobar',
    },
}

}

正如设置所暗示的,在这种情况下,数据库用户的名称是 myuser 。所以,让我们启动 Postgres shell 并授予数据库创建权限。

 sudo -u postgres psql

psql (14.5 (Ubuntu 14.5-1.pgdg22.04+1))

postgres=# ALTER ROLE myuser CREATEDB;
Output: ALTER ROLE

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

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