TL;DR
Jika Anda hanya menginginkan solusinya, ini dia. Pastikan server Postgres Anda memiliki database "postgres". Anda dapat memeriksa dengan menghubungkan melalui psql
, dan menjalankan /list
atau /l
. Anda dapat membuat database dengan menjalankan:CREATE DATABASE postgres
di psql.
Diperpanjang
Django memilih untuk tidak menjalankan "kueri inisialisasi" (mungkin hal-hal seperti membuat basis data pengujian) dari basis data "default" yang ditentukan dalam DATABASES
Anda pengaturan. Ini dianggap sebagai basis data produksi, jadi adalah kepentingan terbaik Django untuk tidak main-main di sana.
Inilah sebabnya mengapa di awal pengujian, ini ditampilkan (abaikan sistem file saya):
/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 mencari database bernama "postgres" pada host yang ditentukan dalam DATABASES
Anda pengaturan, ini adalah tempat menjalankan kueri untuk membuat dan menghapus database pengujian Anda. (Catatan:Django tidak memerlukan basis data "postgres" untuk secara eksplisit ditentukan dalam pengaturan Anda, Django hanya mencarinya pada server basis data apa pun yang ditentukan dalam pengaturan Anda).
Tampaknya jika basis data "postgres" ini tidak ada, Django dapat membuat basis data pengujian dan menjalankan pengujian, tetapi ia tidak dapat menghapus basis data pengujian. Ini mungkin karena Postgres tidak mengizinkan Anda untuk menjatuhkan basis data yang saat ini Anda hubungkan, namun bagi saya tampaknya tidak ada alasan bahwa Django tidak bisa begitu saja menjatuhkan basis data uji dari basis data "default" (produksi) yang ditentukan dalam pengaturan. Saya kira itu menggunakan database "default" untuk membuat database pengujian, jadi sepertinya tidak ada alasan mengapa itu tidak dapat menghapusnya juga.
Terlepas dari itu, solusinya hanya membuat database "postgres" itu dengan pernyataan SQL sederhana:CREATE DATABASE postgres
. Setelah database itu dibuat, semuanya bekerja dengan baik.