सर्वर को बंद किए बिना किसी विशिष्ट डेटाबेस के सभी कनेक्शन कैसे छोड़ें?


45

मैं सभी कनेक्शन (सत्र) को छोड़ना चाहता हूं जो वर्तमान में एक विशिष्ट PostgreSQL डेटाबेस के लिए खोले जाते हैं, लेकिन सर्वर को फिर से शुरू किए बिना या अन्य डेटाबेस से कनेक्शन को डिस्कनेक्ट किए बिना।

मैं उसे कैसे कर सकता हूँ?


मैंने कहीं पढ़ा है कि आप इसे प्राप्त करने के लिए lowth.com/cutter का उपयोग कर सकते हैं ।

जवाबों:


22

यहाँ StackOverflow पर इसी तरह के सवाल का मेरा जवाब है ।

Postgresql के आपके संस्करण के आधार पर, आप बग में भाग सकते हैं, जो कि pg_stat_activityगिराए गए उपयोगकर्ताओं से सक्रिय कनेक्शन को छोड़ देता है। ये कनेक्शन pgAdminIII के अंदर भी नहीं दिखाए गए हैं।

यदि आप स्वचालित परीक्षण कर रहे हैं (जिसमें आप उपयोगकर्ता भी बनाते हैं) तो यह एक संभावित परिदृश्य हो सकता है।

इस मामले में आपको प्रश्नों पर वापस लौटने की आवश्यकता है जैसे:

 SELECT pg_terminate_backend(pg_stat_activity.procpid) 
 FROM pg_stat_get_activity(NULL::integer) 
 WHERE datid=(SELECT oid from pg_database where datname = 'your_database');

8
त्रुटि: तालिका से "Pg_stat_activity" (psql (
9.6.1

4
यह अब काम नहीं करता है .... उपरोक्त त्रुटि प्राप्त करें
लाइटवेट

नीचे
सीजोन

क्लॉज से गायब, काम नहीं करता
विपुल

78

इस तरह की क्वेरी में मदद करनी चाहिए (डेटाबेस को 'db' नाम दिया गया है):

select pg_terminate_backend(pid) from pg_stat_activity where datname='db';

pidकहा जाता है procpid, इसलिए यदि आप 9.2 से अधिक पुराने पोस्टग्रेज के संस्करण का उपयोग कर रहे हैं, तो आप निम्नलिखित प्रयास कर सकते हैं:

select pg_terminate_backend(procpid) from pg_stat_activity where datname='db';

हालाँकि आपको अन्य उपयोगकर्ताओं को डिस्कनेक्ट करने के लिए सुपरयुसर होना होगा।

यह भी उपयोगी हो सकता है REVOKE CONNECT ON DATABASE FROM PUBLICया कुछ इसी तरह, और फिर GRANTयह बाद में।


3

इसका उपयोग क्लाइंट कनेक्शन से डेटाबेस को "मुक्त" करने के लिए किया जा सकता है, ताकि आप उदाहरण के लिए इसका नाम बदल सकें:

SELECT pg_terminate_backend(procpid) FROM pg_stat_activity WHERE datname='current_db';
ALTER DATABASE current_db RENAME TO old_db;
ALTER DATABASE new_db RENAME TO current_db;

विदित हो कि इससे आपके क्लाइंट ऐप्स को समस्यात्मक व्यवहार हो सकता है। लेन-देन का उपयोग करने के कारण डेटा की वास्तविक मात्रा पर पर्दा नहीं डाला जाना चाहिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.