TL;DR
Pokud chcete řešení, tady je. Ujistěte se, že váš server Postgres má databázi "postgres". Můžete to zkontrolovat připojením přes psql
a spuštěním /list
nebo /l
. Databázi můžete vytvořit spuštěním:CREATE DATABASE postgres
v psql.
Rozšířené
Django raději nespouští „inicializační dotazy“ (pravděpodobně věci jako vytvoření testovací databáze) z „výchozí“ databáze uvedené ve vašich DATABASES
nastavení. Předpokládá se, že toto je produkční databáze, takže by bylo v Djangově nejlepším zájmu, aby se tam nepletl.
To je důvod, proč se na začátku testů zobrazuje toto (ignorujte můj souborový systém):
/Users/dcgoss/Desktop/Pickle/PickleBackend/venv/lib/python3.4/site-packages/django/db/backends/postgresql/base.py:247:
RuntimeWarning: Normally Django will use a connection to the 'postgres' database to avoid running initialization queries against the production database when it's not needed
(for example, when running tests). Django was unable to create a connection to the 'postgres' database and will use the default database instead.
RuntimeWarning
Django hledá databázi s názvem "postgres" na hostiteli uvedeném ve vašich DATABASES
nastavení, zde spouští dotazy k vytvoření a odstranění vaší testovací databáze. (Poznámka:Django nepotřebuje, aby byla databáze "postgres" explicitně specifikována ve vašem nastavení, pouze ji hledá na jakémkoli databázovém serveru, který je uveden ve vašich nastaveních).
Zdá se, že pokud tato "postgres" databáze neexistuje, Django může vytvořit testovací databázi a spustit testy, ale nemůže testovací databázi smazat. Může to být proto, že Postgres vám neumožňuje zrušit databázi, ke které jste aktuálně připojeni, ale zdá se mi, že neexistuje žádný důvod, proč by Django nemohl jednoduše zrušit testovací databázi z „výchozí“ (produkční) databáze uvedené v nastavení. Předpokládám, že k vytvoření testovací databáze používá "výchozí" databázi, takže se zdá, že neexistuje důvod, proč by ji nemohl také smazat.
Bez ohledu na to bylo řešením pouze vytvořit tuto "postgres" databázi pomocí jednoduchého SQL příkazu:CREATE DATABASE postgres
. Po vytvoření databáze vše fungovalo dobře.