#django #postgresql #pgbouncer
#django #postgresql #pgbouncer
Вопрос:
Я использую pgbouncer с Django. Я добавил test_foo
базу данных в ее конфигурацию, чтобы иметь возможность запускать тесты, потому что, по-видимому, Django не может использовать другой порт для тестовой базы данных. Теперь тест выполняется, но в конце, когда Django пытается удалить тестовую базу данных, я получаю
django.db.utils.DatabaseError: database "test_foo" is being accessed by other users
DETAIL: There are 1 other session(s) using the database.
Я полагаю, что это вызвано открытым соединением, сохраненным pgbouncer. Что я могу сделать?
Комментарии:
1. Это такая неприятная проблема.
Ответ №1:
Это не идеальное решение, но оно делает свое дело. Вы можете заставить Django использовать другие настройки базы данных при выполнении модульных тестов, добавив в свой settings.py:
if 'test' in sys.argv or 'test_coverage' in sys.argv:
# Use 5432 as db port (avoid going through pgbouncer, can't delete test DB).
DATABASES = {
'default': {
'ENGINE': 'django.contrib.gis.db.backends.postgis',
'NAME': 'xxx',
'USER': 'xxx',
'PASSWORD': 'xxx',
'HOST': '',
'PORT': '5432'
},
}
Комментарии:
1. отличный ответ, работает нормально. Небольшая настройка: напишите код, подобный этому, чтобы просто изменить номер порта, предполагая, что это после вашей обычной настройки баз ДАННЫХ:
if 'test' in sys.argv or 'test_coverage' in sys.argv: DATABASES['default']['PORT'] = 5432