我在Mac OS X上运行Django 1.9,Postgres 9.5.1
当我运行/manage.py test --settings=myproj.settings.local
我明白了:
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.
所以,根据This post,我运行:
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.
查看进程列表,数据库中没有附加任何内容。我终止服务器并重新启动,但运行测试的管理命令仍然给我一个错误,即数据库附加了另一个会话。
这是一个真正令人头疼的问题,我以前从未见过这个 - 还有其他人吗?
我的设置:
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',
}
}
答案 0 :(得分:5)
sudo /etc/init.d/postgresql restart
可能会重启将解决此问题
答案 1 :(得分:1)
我发现CHUCKCMARTIN
移植了一个有用的答案here
总结起来,您需要运行以下代码以使其再次可用。
from django.core.management.base import BaseCommand
from django.db import connection
from django.conf import settings
cursor = connection.cursor()
database_name = 'test_<FAILING_DB_NAME>'
cursor.execute(
"SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity "
"WHERE pg_stat_activity.datname = %s AND pid <> pg_backend_pid();", [database_name])
答案 2 :(得分:0)
详细信息:使用数据库还有另外一个会话。
在pg admin ui中打开测试数据库并尝试同时运行django测试时看到此消息。在删除db django / psycopg2之前,检查该数据库上是否有活动的会话。在pg admin中关闭与服务器的连接,它就可以了。检查您是否在shell或ui中连接到db。不需要重启服务器。
答案 3 :(得分:0)
在终端中,运行:
interface Variables {
uuid: string;
value: string;
}
const { mutate: myMutation } = useMutation(myGqlMutation);
这将输出使用postgres运行的不同进程,例如:
myMutation({
uuid: '....',
value: '....',
} as any); // get rid of any here ...
找到运行ps aux | grep postgres
的进程以及该进程的对应ID,在本示例中为my_user 5983 0.0 0.0 7325299 4583 ?? Ss 3:15PM 0:00.02 postgres: my_user test_myproj [local] idle
。通过运行以下命令终止该过程:
test_myproj