sql >> データベース >  >> RDS >> PostgreSQL

Djangoはデータベースを削除できません:psycopg2.OperationalError:現在開いているデータベースを削除できません

    TL; DR

    解決策が必要な場合は、ここにあります。Postgresサーバーに「postgres」データベースがあることを確認してください。 psql経由で接続して確認できます 、および/listを実行します または/lCREATE 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は、DATABASESで指定されたホストで「postgres」という名前のデータベースを探します 設定では、ここでクエリを実行してテストデータベースを作成および削除します。 (注:Djangoは、設定で「postgres」データベースを明示的に指定する必要はありません。設定で指定されているデータベースサーバーでデータベースを検索するだけです)。

    この「postgres」データベースが存在しない場合、Djangoはテストデータベースを作成してテストを実行できますが、テストデータベースを削除することはできません。これは、Postgresで現在接続しているデータベースを削除できないためかもしれませんが、Djangoがで指定された「デフォルト」(本番)データベースからテストデータベースを削除できなかった理由はないようです。設定。 「デフォルト」データベースを使用してテストデータベースを作成していると思われるので、それも削除できない理由はないようです。

    とにかく、解決策は、単純なSQLステートメントでその「postgres」データベースを作成することでした:CREATE DATABASE postgres 。そのデータベースが作成された後、すべてが正常に機能しました。



    1. SQLServerでBCPコマンドを使用してxmlデータをエクスポートする

    2. 毎週のイベントをMySQLに保存する最良の方法は?

    3. 挿入クエリ中に文字列が途切れる

    4. R12.2のログインフローと基本的なトラブルシューティング