TL;DR
Ако просто искате решението, ето го. Уверете се, че вашият Postgres сървър има база данни "postgres". Можете да проверите, като се свържете чрез psql
и стартиране на /list
или /l
. Можете да създадете базата данни, като изпълните:CREATE DATABASE postgres
в psql.
Разширен
Django предпочита да не изпълнява „заявки за инициализация“ (вероятно неща като създаване на тестовата база данни) от базата данни „по подразбиране“, посочена във вашите DATABASES
настройка. Предполага се, че това е производствената база данни, така че би било в най-добрия интерес на Django да не се забърква там.
Ето защо в началото на тестовете се показва това (игнорирайте моята файлова система):
/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 търси база данни с име "postgres" на хоста, посочен във вашите DATABASES
настройки, това е мястото, където той изпълнява заявките за създаване и изтриване на вашата тестова база данни. (Забележка:Django не се нуждае базата данни "postgres" да бъде изрично посочена в настройките ви, той просто я търси на който и да е сървър на база данни, посочен в настройките ви).
Изглежда, че ако тази база данни "postgres" не съществува, Django може да създаде тестовата база данни и да изпълни тестовете, но не може да изтрие тестовата база данни. Това може да се дължи на факта, че Postgres не ви позволява да премахнете базата данни, към която сте свързани в момента, но за мен изглежда, че няма причина Django да не може просто да премахне тестовата база данни от базата данни "по подразбиране" (производствена), посочена в настройките. Предполагам, че използва базата данни „по подразбиране“, за да създаде тестовата база данни, така че изглежда няма причина да не може да изтрие и нея.
Независимо от това, решението беше просто да се създаде тази "postgres" база данни с проста SQL команда:CREATE DATABASE postgres
. След като тази база данни беше създадена, всичко работеше добре.