2016-08-17 3 views
4

Ich bin mit Django 1.9, Postgres 9.5.1 auf Mac OS XDjango Test - Unable Testdatenbank

Wenn ich laufen /manage.py test --settings=myproj.settings.local

ich löschen und neu erstellen:

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. 

so, wie pro This post, ich laufe:

SELECT 
    pg_terminate_backend(pid) 
FROM 
    pg_stat_activity 
WHERE 

    pid <> pg_backend_pid() 

    AND datname = 'test_myproj' 
    ; 

Die zugehenund versuchen, Tests erneut auszuführen, nur um den Fehler zu erhalten DETAIL: There is 1 other session using the database.

Als die Prozessliste wird nichts an die Datenbank angehängt. Ich kill den Server und neu starten, aber der Verwaltungsbefehl zum Ausführen von Tests gibt mir immer noch den Fehler, dass eine andere Sitzung mit der Datenbank verbunden ist.

Das ist ein echter Kopfkratzer, ich habe das noch nie gesehen - hat sonst noch jemand?

Meine Einstellungen:

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

Ich habe keine Lösung, aber Ihr Problem scheint zu sein, dass beide Datenbanken im Test den Namen 'test_myproj' haben - standardmäßig funktioniert es, und als Benutzerstandort wird diese Datenbank als vorhanden erkannt. Die vorhandene Sitzung ist diejenige, die noch von Ihrem aktuellen Django verwendet wird, der die Tests ausführt. Und nachdem das Skript stirbt, gibt es keine Sitzung mehr;) – dahrens

+1

werfen Sie einen Blick auf diese [docs] (https://docs.djangoproject.com/de/1.10/topics/testing/advanced/#controlling-creation-order-for (Testdatenbanken) – dahrens

+0

@dahrens, danke. Fixed Einstellungsdatei ein bisschen und funktioniert wie ein Charme. – fiacre

Antwort

5

sudo /etc/init.d/postgresql restart kann ein Neustart löst dieses Problem

+0

Ich bin auf einem Mac, '$ pg_ctl -D/usr/local/var/postgres -l /usr/local/var/postgres/server.log Neustart' dann './manage.py test --settings = Ohmgear. settings.local --no-input' gibt den gleichen Fehler: 'Alte Testdatenbank für Alias ​​'userlocation' wird zerstört ... Fehler beim Wiederherstellen der Testdatenbank: Datenbank" test_og_myproj "existiert nicht' – fiacre

+0

" Ich kill den Server und neu starten, aber der Verwaltungsbefehl zum Ausführen von Tests gibt mir immer noch den Fehler, dass eine andere Sitzung an die Datenbank angehängt ist. " - Ich habe das versucht – fiacre

0

Detail: Es 1 weitere Sitzung ist es, die Datenbank zu verwenden.

Habe diese Nachricht gesehen, als die Testdatenbank in Pg Admin geöffnet wurde und versucht, Djangotests gleichzeitig auszuführen. Vor dem Löschen der Datenbank überprüft db django/psycopg2, ob auf dieser Datenbank Sitzungen aktiv sind. Closed die Verbindung zum Server in Pg Admin und es funktioniert einfach. Überprüfen Sie, ob Sie eine Verbindung zur Datenbank in der Shell oder in der Benutzerschnittstelle haben. Sollte den Server nicht neu starten müssen.

+0

Danach wenn Tests laufen ok, aber dies zeigt django.db.utils.OperationalError: kann die derzeit offene Datenbank nicht fallen: dann Django muss eine Verbindung zu der Postgres-Datenbank und das muss in pg_hba definiert werden. Konf. –