PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Django nie może usunąć bazy danych:psycopg2.OperationalError:nie może usunąć aktualnie otwartej bazy danych

TL;DR

Jeśli chcesz tylko rozwiązania, oto ono. Upewnij się, że Twój serwer Postgres ma bazę danych „postgres”. Możesz to sprawdzić, łącząc się przez psql i uruchomienie /list lub /l . Możesz utworzyć bazę danych, uruchamiając:CREATE DATABASE postgres w psql.

Rozszerzony

Django woli nie uruchamiać "zapytań inicjujących" (przypuszczalnie rzeczy takich jak tworzenie testowej bazy danych) z "domyślnej" bazy danych określonej w Twoich DATABASES ustawienie. Zakłada się, że jest to produkcyjna baza danych, więc w najlepszym interesie Django byłoby nie zadzierać z nią.

Dlatego na początku testów jest to pokazane (zignoruj ​​mój system plików):

    /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 szuka bazy danych o nazwie "postgres" na hoście określonym w Twoich DATABASES ustawienia, w tym miejscu uruchamia zapytania w celu utworzenia i usunięcia testowej bazy danych. (Uwaga:Django nie wymaga, aby baza danych "postgres" była wyraźnie określona w twoich ustawieniach, po prostu szuka jej na dowolnym serwerze bazy danych określonym w twoich ustawieniach).

Wygląda na to, że jeśli ta baza danych "postgres" nie istnieje, Django może utworzyć testową bazę danych i uruchomić testy, ale nie może usunąć testowej bazy danych. Może to być spowodowane tym, że Postgres nie pozwala na usunięcie bazy danych, z którą jesteś aktualnie połączony, jednak wydaje mi się, że nie ma powodu, dla którego Django nie mogło po prostu usunąć bazy testowej z „domyślnej” (produkcyjnej) bazy danych określonej w ustawienia. Przypuszczam, że używa „domyślnej” bazy danych do tworzenia testowej bazy danych, więc wydaje się, że nie ma powodu, dla którego nie może jej również usunąć.

Niezależnie od tego, rozwiązaniem było po prostu stworzenie bazy danych "postgres" za pomocą prostej instrukcji SQL:CREATE DATABASE postgres . Po utworzeniu tej bazy danych wszystko działało dobrze.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Przeskocz lukę SQL nad określonym warunkiem i właściwym użyciem lead()

  2. Aktualizacja Lion usunęła użytkownika „postgres”. Jak go przywrócić?

  3. Programista Oracle SQL i PostgreSQL

  4. Szukam numeru telefonu zawierającego minus, np. 123-456789

  5. Co się dzieje z NOTIFY, gdy żadna sesja nie wysłała LISTEN w PostgreSQL?