PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Django не може да премахне базата данни:psycopg2.OperationalError:не може да премахне текущо отворената база данни

TL;DR

Ако просто искате решението, ето го. Уверете се, че вашият Postgres сървър има база данни "postgres". Можете да проверите, като се свържете чрез psql и стартиране на /list или /l . Можете да създадете базата данни, като изпълните:CREATE DATABASE postgres в psql.

Разширен

Django предпочита да не изпълнява „заявки за инициализация“ (вероятно неща като създаване на тестовата база данни) от базата данни „по подразбиране“, посочена във вашите DATABASES настройка. Предполага се, че това е производствената база данни, така че би било в най-добрия интерес на Django да не се забърква там.

Ето защо в началото на тестовете се показва това (игнорирайте моята файлова система):

    /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 търси база данни с име "postgres" на хоста, посочен във вашите DATABASES настройки, това е мястото, където той изпълнява заявките за създаване и изтриване на вашата тестова база данни. (Забележка:Django не се нуждае базата данни "postgres" да бъде изрично посочена в настройките ви, той просто я търси на който и да е сървър на база данни, посочен в настройките ви).

Изглежда, че ако тази база данни "postgres" не съществува, Django може да създаде тестовата база данни и да изпълни тестовете, но не може да изтрие тестовата база данни. Това може да се дължи на факта, че Postgres не ви позволява да премахнете базата данни, към която сте свързани в момента, но за мен изглежда, че няма причина Django да не може просто да премахне тестовата база данни от базата данни "по подразбиране" (производствена), посочена в настройките. Предполагам, че използва базата данни „по подразбиране“, за да създаде тестовата база данни, така че изглежда няма причина да не може да изтрие и нея.

Независимо от това, решението беше просто да се създаде тази "postgres" база данни с проста SQL команда:CREATE DATABASE postgres . След като тази база данни беше създадена, всичко работеше добре.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Алтернативи на PGTune - ClusterControl PostgreSQL конфигурация

  2. Извършване на транзакции при изпълнение на функция postgreql

  3. Проблеми с паралелността при извличане на идентификатори на нововмъкнати редове с ibatis

  4. Актуализирайте съществуващ ред в базата данни от pandas df

  5. PostgreSQL:таблица само за четене