PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Django không thể thả cơ sở dữ liệu:psycopg2.OperationalError:không thể thả cơ sở dữ liệu hiện đang mở

TL; DR

Nếu bạn chỉ muốn giải pháp, đây là nó. Hãy đảm bảo rằng máy chủ Postgres của bạn có cơ sở dữ liệu "postgres". Bạn có thể kiểm tra bằng cách kết nối qua psql và chạy /list hoặc /l . Bạn có thể tạo cơ sở dữ liệu bằng cách chạy:CREATE DATABASE postgres trong psql.

Mở rộng

Django không muốn chạy "truy vấn khởi tạo" (có lẽ là những thứ như tạo cơ sở dữ liệu thử nghiệm) từ cơ sở dữ liệu "mặc định" được chỉ định trong DATABASES của bạn cài đặt. Đây được cho là cơ sở dữ liệu sản xuất, vì vậy lợi ích tốt nhất của Django là không gây rối ở đó.

Đây là lý do tại sao khi bắt đầu các bài kiểm tra, điều này được hiển thị (bỏ qua hệ thống tệp của tôi):

    /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 tìm kiếm cơ sở dữ liệu có tên "postgres" trên máy chủ được chỉ định trong DATABASES của bạn cài đặt, đây là nơi nó chạy các truy vấn để tạo và xóa cơ sở dữ liệu thử nghiệm của bạn. (Lưu ý:Django không cần chỉ định rõ ràng cơ sở dữ liệu "postgres" trong cài đặt của bạn, nó chỉ tìm kiếm nó trên bất kỳ máy chủ cơ sở dữ liệu nào được chỉ định trong cài đặt của bạn).

Có vẻ như nếu cơ sở dữ liệu "postgres" này không tồn tại, Django có thể tạo cơ sở dữ liệu thử nghiệm và chạy các thử nghiệm, nhưng nó không thể xóa cơ sở dữ liệu thử nghiệm. Điều này có thể là do Postgres không cho phép bạn loại bỏ cơ sở dữ liệu mà bạn hiện đang kết nối, tuy nhiên đối với tôi có vẻ như không có lý do gì mà Django không thể bỏ cơ sở dữ liệu thử nghiệm khỏi cơ sở dữ liệu "mặc định" (sản xuất) được chỉ định trong các thiết lập. Tôi cho rằng nó đang sử dụng cơ sở dữ liệu "mặc định" để tạo cơ sở dữ liệu thử nghiệm, vì vậy có vẻ như không có lý do gì khiến nó không thể xóa nó.

Bất kể, giải pháp chỉ là tạo cơ sở dữ liệu "postgres" bằng một câu lệnh SQL đơn giản:CREATE DATABASE postgres . Sau khi cơ sở dữ liệu đó được tạo, mọi thứ đều hoạt động tốt.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để truyền một ngày null trong một nativeQuery ở chế độ ngủ đông?

  2. Tự động quay lại trong postgres bằng PDO

  3. Nhập tệp CSV đã nén vào PostgreSQL

  4. Làm cách nào để kết nối với PostgreSQL mà không chỉ định tên cơ sở dữ liệu?

  5. Sự khác biệt giữa pg_table_size, pg_relation_size &pg_total_relation_size là gì? (PostgreSQL)