Django / postgres setup для создания баз данных, для запуска тестов


Мои unittests простираются от django.test.TestCase. Используя серверную часть SQLite3, они работают нормально.

Я хочу запустить их с бэкэндом PostgreSQL, и первое, что делают тесты, - это пытаются создать тестовую базу данных. Это не удается, так как у django нет разрешений на это. Я хочу настроить PostgreSQL / django так, чтобы эта операция была разрешена, но я не могу найти никакой документации о том, как это сделать.

Эти настройки используются для подключения к база данных (settings.py):

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'mydb',
        'USER': 'myuser',
        'PASSWORD': 'myppasss',
        'HOST': 'localhost',
        'PORT': '',
    }
}

При запуске приложения django у меня всегда есть предварительно созданная база данных и пользователь, так что django может подключиться.

У меня есть два вопроса:

  • какие настройки подключения используются для создания базы данных во время модульного теста? Насколько я понимаю, пользователь, которого django использует для подключения к базе данных приложения, не должен (и не должен) иметь права на создание базы данных.
  • где все это описал? Самое близкое, что я нашел, - это здесь (TEST ключ в параметре DATABASES config), но эти настройки в основном относятся к базам данных Oracle и имеют другое назначение.
1 4

1 ответ:

Django будет использовать те же настройки подключения, что и в вашем settings.py для тестов, но будет использоваться другая база данных (по умолчанию, test_mydb, где ваша обычная база данных mydb).

Вы можете изменить права пользователя django на создание баз данных в оболочке psql. Смотрите этот связанный ответ для получения дополнительной информации.

=> ALTER USER myuser CREATEDB;

Я не знаю, можно ли ограничить разрешение, чтобы пользователь django мог только создавать базу данных test_mydb.