django не может удалить тестовую базу данных через pgbouncer

#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