django不能通过pgbouncer丢弃测试数据库

wRA*_*RAR 6 django postgresql pgbouncer

我正在和Django一起使用pgbouncer.我已经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.
Run Code Online (Sandbox Code Playgroud)

我想这是由pgbouncer存储的开放连接引起的.我能做什么?

Dic*_*ick 6

这不是完美的解决方案,但它可以解决问题.通过添加到settings.py,可以强制Django在运行单元测试时使用不同的数据库设置:

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'
        },
    }
Run Code Online (Sandbox Code Playgroud)

  • 很好的答案,工作正常.小调整:编写这样的代码只是改变端口号,假设这是在正常的DATABASES设置之后:sys.argv中的`if'test'或sys.argv中的'test_coverage':DATABASES ['default'] ['PORT '] = 5432` (2认同)