sql >> Database >  >> RDS >> PostgreSQL

Django kan database niet verwijderen:psycopg2.OperationalError:kan de momenteel geopende database niet verwijderen

TL;DR

Als u alleen de oplossing wilt, hier is het. Zorg ervoor dat uw Postgres-server een "postgres" -database heeft. U kunt dit controleren door verbinding te maken via psql , en het uitvoeren van /list of /l . U kunt de database maken door het volgende uit te voeren:CREATE DATABASE postgres in psql.

Verlengd

Django geeft er de voorkeur aan om geen "initialisatiequery's" (vermoedelijk zaken als het maken van de testdatabase) uit te voeren vanuit de "standaard" database die is opgegeven in uw DATABASES instelling. Dit wordt verondersteld de productiedatabase te zijn, dus het zou in het belang van Django zijn om daar niet te rommelen.

Dit is de reden waarom aan het begin van de tests dit wordt getoond (negeer mijn bestandssysteem):

    /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 zoekt naar een database met de naam "postgres" op de host die is opgegeven in uw DATABASES instellingen, hier worden de query's uitgevoerd om uw testdatabase te maken en te verwijderen. (Opmerking:Django hoeft de "postgres"-database niet expliciet in uw instellingen te specificeren, het zoekt er alleen naar op de databaseserver die is opgegeven in uw instellingen).

Het lijkt erop dat als deze "postgres"-database niet bestaat, Django de testdatabase kan maken en de tests kan uitvoeren, maar de testdatabase niet kan verwijderen. Dit kan zijn omdat Postgres u niet toestaat de database te verwijderen waarmee u momenteel bent verbonden, maar voor mij lijkt het erop dat er geen reden is dat Django de testdatabase niet gewoon zou kunnen verwijderen uit de "standaard" (productie) database die is gespecificeerd in de instellingen. Ik neem aan dat het de "standaard" database gebruikt om de testdatabase te maken, dus het lijkt erop dat er geen reden is waarom het deze ook niet kan verwijderen.

Hoe dan ook, de oplossing was gewoon om die "postgres"-database te maken met een eenvoudige SQL-instructie:CREATE DATABASE postgres . Nadat die database was gemaakt, werkte alles prima.



  1. Postgresql volledige tekst zoeken in postgresql - japans, chinees, arabisch

  2. Hoe array-basistype in postgres te krijgen via jdbc

  3. MySQL-syntaxisfout bij het maken van tabellen

  4. Een tabel bijwerken met JOIN in SQL Server?