TL;DR
Hvis du bare vil have løsningen, så er den her. Sørg for at din Postgres-server har en "postgres"-database. Du kan tjekke ved at oprette forbindelse via psql
, og kører /list
eller /l
. Du kan oprette databasen ved at køre:CREATE DATABASE postgres
i psql.
Udvidet
Django foretrækker ikke at køre "initialiseringsforespørgsler" (formodentlig ting som at oprette testdatabasen) fra "standard"-databasen angivet i dine DATABASES
indstilling. Dette formodes at være produktionsdatabasen, så det ville være i Djangos bedste interesse ikke at rode rundt der.
Dette er grunden til, at dette i begyndelsen af testene vises (ignorer mit filsystem):
/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 leder efter en database ved navn "postgres" på den vært, der er angivet i dine DATABASES
indstillinger, er det her, den kører forespørgslerne for at oprette og slette din testdatabase. (Bemærk:Django behøver ikke at "postgres"-databasen er eksplicit angivet i dine indstillinger, den søger bare efter den på den databaseserver, der er angivet i dine indstillinger).
Det ser ud til, at hvis denne "postgres"-database ikke eksisterer, kan Django oprette testdatabasen og køre testene, men den kan ikke slette testdatabasen. Dette kan skyldes, at Postgres ikke tillader dig at droppe den database, du i øjeblikket er forbundet til, men for mig ser det ud til, at der ikke er nogen grund til, at Django ikke bare kunne droppe testdatabasen fra "standard" (produktions)databasen specificeret i indstillingerne. Jeg formoder, at den bruger "standard"-databasen til at oprette testdatabasen, så det ser ud til, at der ikke er nogen grund til, at den ikke også kan slette den.
Uanset hvad var løsningen bare at oprette den "postgres"-database med en simpel SQL-sætning:CREATE DATABASE postgres
. Efter at databasen var oprettet, fungerede alt fint.