sql >> Database teknologi >  >> RDS >> PostgreSQL

Django kan ikke slippe databasen:psycopg2.OperationalError:kan ikke slippe den aktuelt åbne database

TL;DR

Hvis du bare vil have løsningen, så er den her. Sørg for at din Postgres-server har en "postgres"-database. Du kan tjekke ved at oprette forbindelse via psql , og kører /list eller /l . Du kan oprette databasen ved at køre:CREATE DATABASE postgres i psql.

Udvidet

Django foretrækker ikke at køre "initialiseringsforespørgsler" (formodentlig ting som at oprette testdatabasen) fra "standard"-databasen angivet i dine DATABASES indstilling. Dette formodes at være produktionsdatabasen, så det ville være i Djangos bedste interesse ikke at rode rundt der.

Dette er grunden til, at dette i begyndelsen af ​​testene vises (ignorer mit filsystem):

    /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 leder efter en database ved navn "postgres" på den vært, der er angivet i dine DATABASES indstillinger, er det her, den kører forespørgslerne for at oprette og slette din testdatabase. (Bemærk:Django behøver ikke at "postgres"-databasen er eksplicit angivet i dine indstillinger, den søger bare efter den på den databaseserver, der er angivet i dine indstillinger).

Det ser ud til, at hvis denne "postgres"-database ikke eksisterer, kan Django oprette testdatabasen og køre testene, men den kan ikke slette testdatabasen. Dette kan skyldes, at Postgres ikke tillader dig at droppe den database, du i øjeblikket er forbundet til, men for mig ser det ud til, at der ikke er nogen grund til, at Django ikke bare kunne droppe testdatabasen fra "standard" (produktions)databasen specificeret i indstillingerne. Jeg formoder, at den bruger "standard"-databasen til at oprette testdatabasen, så det ser ud til, at der ikke er nogen grund til, at den ikke også kan slette den.

Uanset hvad var løsningen bare at oprette den "postgres"-database med en simpel SQL-sætning:CREATE DATABASE postgres . Efter at databasen var oprettet, fungerede alt fint.



  1. Enhver måde at undgå en filsortering, når ordre efter er forskellig fra hvor-klausulen?

  2. opdatering af rækker i stedet for at oprette nye indgange database android

  3. Hvad er nyt i PostgreSQL 13?

  4. Sådan indsætter du flere billeder i MySQL-databasetabel med fremmednøgle, der refererer til en enkelt primærnøgle