Setiap kali saya mencoba drop database saya mendapatkan:
ERROR: database "pilot" is being accessed by other users
DETAIL: There is 1 other session using the database.
Ketika saya menggunakan:
SELECT pg_terminate_backend(pg_stat_activity.pid)
FROM pg_stat_activity
WHERE pg_stat_activity.datname = 'TARGET_DB';
Saya memutuskan koneksi dari DB itu, tetapi jika saya mencoba untuk menjatuhkan database setelah itu entah bagaimana seseorang secara otomatis terhubung ke database itu dan memberikan kesalahan ini. Apa yang bisa melakukan itu? Tidak ada yang menggunakan database ini, kecuali saya.
sumber
GRANT CONNECT ON DATABASE thedb TO public;
Setiap kali saya mencoba drop database saya mendapatkan:
Pertama, Anda perlu mencabut
Kemudian gunakan:
Itu pasti akan berhasil.
sumber
Saya menemukan solusi untuk masalah ini, coba jalankan perintah ini di terminal
matikan proses dengan perintah ini
sumber
Cukup periksa apa hubungannya, dari mana asalnya. Anda dapat melihat semua ini di:
Mungkin itu koneksi Anda?
sumber
Ini berarti pengguna lain sedang mengakses database. Cukup restart PostgreSQL. Perintah ini akan melakukan triknya
Kemudian coba jatuhkan database:
Ini akan melakukan triknya.
sumber
solusi pgAdmin 4 menggunakan UI
Pertama-tama aktifkan aktivitas acara di dasbor jika Anda belum:
Sekarang nonaktifkan semua proses menggunakan db:
Seharusnya sekarang bisa menghapus db.
sumber
Jika tidak ada dampak potensial pada layanan lain pada mesin Anda, cukup
service postgresql restart
sumber
Solusi:
1. Matikan server Pg 2. Ini akan memutuskan semua koneksi yang aktif 3. Restart Server Pg 4. Coba perintah Anda
sumber
Sederhana seperti itu
sumber
Dalam kasus saya, saya menggunakan AWS Redshift (berdasarkan Postgres). Dan tampaknya tidak ada koneksi lain ke DB, tapi saya mendapatkan kesalahan yang sama.
Dalam kasus saya, sepertinya cluster database masih melakukan beberapa pemrosesan pada database, dan sementara tidak ada koneksi eksternal / pengguna lain, database masih digunakan secara internal. Saya menemukan ini dengan menjalankan yang berikut:
Jadi hack saya adalah menulis satu loop dalam kode saya, mencari baris dengan nama database saya di dalamnya. (tentu saja loop tidak terbatas, dan loop mengantuk, dll)
Jika baris ditemukan, lanjutkan untuk menghapus setiap PID, satu per satu.
Jika tidak ada baris yang ditemukan, lanjutkan untuk menjatuhkan database
Catatan: Dalam kasus saya, saya menulis tes unit / sistem Java, di mana ini dapat dianggap dapat diterima. Ini tidak dapat diterima untuk kode produksi.
Ini hack lengkap, di Java (abaikan kelas tes / utilitas saya).
sumber
Menurut pendapat saya ada beberapa permintaan kosong berjalan di backgroud.
Catatan: Membunuh kueri pemilihan tidak berdampak buruk
sumber
REVOKE CONNECT
tidak akan mencegah koneksi dari pemilik db atau pengguna super. Jadi, jika Anda tidak ingin orang lain menghubungkan db, ikuti perintah mungkin berguna.Kemudian gunakan:
sumber
Sementara saya menemukan dua jawaban top-upvoted berguna pada kesempatan lain, hari ini, cara paling sederhana untuk menyelesaikan masalah adalah dengan menyadari bahwa PyCharm mungkin membuat sesi terbuka, dan jika saya mengklik
Stop
di PyCharm, itu mungkin membantu. Dengan pgAdmin4 terbuka di browser, saya melakukannya, dan hampir segera melihat statistik sesi Database turun menjadi 0, pada titik mana saya bisa menjatuhkan database.sumber
Di macOS cobalah untuk me-restart database postgresql melalui konsol menggunakan perintah:
sumber
Di terminal coba perintah ini:
Anda akan melihat seperti:
Angka ketiga (3645) adalah PID.
Anda dapat menghapus ini
Dan setelah itu mulai koneksi PostgreSQL Anda.
Mulai secara manual:
sumber