关于python:Django测试 – 无法删除并重新创建测试数据库

Django Test — Unable to drop and recreate test database

我在Mac OS X上运行Django 1.9,Postgres 9.5.1

当我运行/manage.py test --settings=myproj.settings.local

我明白了:

1
2
3
4
5
6
7
8
Creating test database for alias 'default'...
Creating test database for alias 'userlocation'...
Got an error creating the test database: database"test_myproj" already exists

Type 'yes' if you would like to try deleting the test database 'test_myproj', or 'no' to cancel: yes
Destroying old test database for alias 'userlocation'...
Got an error recreating the test database: database"test_myproj" is being accessed by other users
DETAIL:  There is 1 other session using the database.

所以,根据这篇文章,我运行:

1
2
3
4
5
6
7
8
9
10
SELECT
    pg_terminate_backend(pid)
FROM
    pg_stat_activity
WHERE

    pid <> pg_backend_pid()

    AND datname = 'test_myproj'
    ;

继续DROP DATABASE test_myproj并尝试再次运行测试以获取错误DETAIL: There is 1 other session using the database.

作为进程列表,数据库中没有附加任何内容。 我终止服务器并重新启动,但运行测试的管理命令仍然给我一个错误,即有另一个会话连接到数据库。

这是一个真正令人头疼的问题,我以前从未见过这个 - 还有其他人吗?

我的设置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'myproj',
        'USER': 'myuser',
        'PASSWORD': 'mypass',
        'HOST': 'localhost',
        'PORT': '',
    },
    'userlocation': {
        'ENGINE': 'django.contrib.gis.db.backends.postgis',
        'NAME': 'og_myproj',
        'USER': 'og_myuser',
        'PASSWORD': 'mypasswd',
        'HOST': 'localhost',
        'PORT': '5432',
    }
}


sudo /etc/init.d/postgresql restart可能是重启会解决这个问题


详细信息:使用数据库还有1个其他会话。

当测试数据库在pg admin ui中打开并尝试同时运行django测试时,已经看到此消息。 在删除db django / psycopg2之前,检查该数据库上是否有活动的会话。 在pg admin中关闭与服务器的连接,它就可以了。 检查您是否在shell或ui中连接到db。 不需要重启服务器。