PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Django tidak dapat menjatuhkan basis data:psycopg2.OperationalError:tidak dapat menjatuhkan basis data yang saat ini terbuka

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Heroku Postgres:Terlalu banyak koneksi. Bagaimana cara mematikan koneksi ini?

  2. subquery di FROM harus memiliki alias

  3. Bagaimana Anda menggunakan variabel skrip di psql?

  4. pemulihan basis data ke status tertentu untuk pengujian

  5. GROUP BY di Postgres - tidak ada kesetaraan untuk tipe data JSON?