sql >> Databáze >  >> RDS >> PostgreSQL

Django nemůže zrušit databázi:psycopg2.OperationalError:nelze zrušit aktuálně otevřenou databázi

TL;DR

Pokud chcete řešení, tady je. Ujistěte se, že váš server Postgres má databázi "postgres". Můžete to zkontrolovat připojením přes psql a spuštěním /list nebo /l . Databázi můžete vytvořit spuštěním:CREATE DATABASE postgres v psql.

Rozšířené

Django raději nespouští „inicializační dotazy“ (pravděpodobně věci jako vytvoření testovací databáze) z „výchozí“ databáze uvedené ve vašich DATABASES nastavení. Předpokládá se, že toto je produkční databáze, takže by bylo v Djangově nejlepším zájmu, aby se tam nepletl.

To je důvod, proč se na začátku testů zobrazuje toto (ignorujte můj souborový systém):

    /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 hledá databázi s názvem "postgres" na hostiteli uvedeném ve vašich DATABASES nastavení, zde spouští dotazy k vytvoření a odstranění vaší testovací databáze. (Poznámka:Django nepotřebuje, aby byla databáze "postgres" explicitně specifikována ve vašem nastavení, pouze ji hledá na jakémkoli databázovém serveru, který je uveden ve vašich nastaveních).

Zdá se, že pokud tato "postgres" databáze neexistuje, Django může vytvořit testovací databázi a spustit testy, ale nemůže testovací databázi smazat. Může to být proto, že Postgres vám neumožňuje zrušit databázi, ke které jste aktuálně připojeni, ale zdá se mi, že neexistuje žádný důvod, proč by Django nemohl jednoduše zrušit testovací databázi z „výchozí“ (produkční) databáze uvedené v nastavení. Předpokládám, že k vytvoření testovací databáze používá "výchozí" databázi, takže se zdá, že neexistuje důvod, proč by ji nemohl také smazat.

Bez ohledu na to bylo řešením pouze vytvořit tuto "postgres" databázi pomocí jednoduchého SQL příkazu:CREATE DATABASE postgres . Po vytvoření databáze vše fungovalo dobře.



  1. Chování Oracle Parallel Query s nástroji IDE jako SQL Developer nebo Toad

  2. Optimální způsob, jak doplnit chybějící hodnoty po LEFT JOIN?

  3. Django migrace – je možné použít jih uprostřed projektu?

  4. Mám přidat sloupec typu pro návrh dědičnosti v postgreSQL?