Saya ingin menghapus semua koneksi (sesi) yang saat ini dibuka untuk database PostgreSQL tertentu tetapi tanpa me-restart server atau memutuskan koneksi ke database lain.
Bagaimana saya bisa melakukan itu?
postgresql
connections
session
Sorin
sumber
sumber
Jawaban:
Inilah jawaban saya untuk pertanyaan yang sangat mirip tentang StackOverflow.
Bergantung pada versi postgresql Anda, Anda mungkin mengalami bug, yang membuat Anda
pg_stat_activity
menghilangkan koneksi aktif dari pengguna yang terputus. Koneksi ini juga tidak ditampilkan di dalam pgAdminIII.Jika Anda melakukan pengujian otomatis (di mana Anda juga membuat pengguna) ini mungkin skenario yang memungkinkan.
Dalam hal ini Anda harus kembali ke kueri seperti:
sumber
Kueri seperti ini seharusnya membantu (dengan asumsi database bernama 'db'):
pid
dulu dipanggilprocpid
, jadi jika Anda menggunakan versi postgres yang lebih tua dari 9,2 Anda bisa mencoba yang berikut:Namun Anda harus menjadi pengguna super untuk memutuskan pengguna lain.
Mungkin juga berguna
REVOKE CONNECT ON DATABASE FROM PUBLIC
atau serupa, dan kemudianGRANT
sesudahnya.sumber
Ini dapat digunakan untuk "membebaskan" database dari koneksi klien, sehingga Anda misalnya dapat mengganti nama:
Ketahuilah bahwa ini dapat menyebabkan perilaku bermasalah ke aplikasi klien Anda. Sebenarnya data tidak boleh mengalir karena menggunakan transaksi.
sumber