यह एक सामान्य पोस्टग्रेज उत्तर है, और हरोकू के लिए विशिष्ट नहीं है
(इस प्रश्न का सरल-बेवकूफ उत्तर हो सकता है ... बस postgresql को पुनरारंभ करें। यह मानते हुए कि यह वांछनीय नहीं है या कोई विकल्प नहीं है ...)
इस sql को चलाकर PID का पता लगाएं:
SELECT pid , query, * from pg_stat_activity
WHERE state != 'idle' ORDER BY xact_start;
(क्वेरी को पोस्टग्रेज के संस्करण के आधार पर मरम्मत की आवश्यकता हो सकती है - अंत में, बस pg_stat_activity से * चुनें)। आपको पहले (बाएं) कॉलम में पिड मिलेगा, और पहली (शीर्ष) पंक्ति वह क्वेरी हो सकती है जिसे आप समाप्त करना चाहते हैं। मैं मान लूंगा कि पिड 1234 नीचे है।
आप SQL के माध्यम से किसी क्वेरी को रद्द कर सकते हैं (अर्थात शेल एक्सेस के बिना) जब तक कि यह आपकी है या आपके पास सुपर उपयोगकर्ता एक्सेस है:
select pg_cancel_backend(1234);
यह 1234-क्वेरी को रद्द करने का "दोस्ताना" अनुरोध है, और कुछ भाग्य के साथ यह थोड़ी देर बाद गायब हो जाएगा। आखिरकार, यह अधिक कुशल है:
select pg_terminate_backend(1234);
यदि आपके पास शेल एक्सेस और रूट है या अनुमतियां पोस्टग्रेज हैं तो आप इसे शेल से भी कर सकते हैं। "रद्द" करने के लिए कोई यह कर सकता है:
kill -INT 1234
और "समाप्त" करने के लिए, बस:
kill 1234
नहीं करें:
kill -9 1234
... जिसके परिणामस्वरूप अक्सर पूरा पोस्टग्रेज सर्वर आग की लपटों में गिर जाएगा, फिर आप पोस्टग्रेज को फिर से शुरू कर सकते हैं। पोस्टग्रेज बहुत मजबूत है, इसलिए डेटा दूषित नहीं होगा, लेकिन मैं किसी भी मामले में "किल -9" का उपयोग करने के खिलाफ अनुशंसा करता हूं :-)
लंबे समय तक चलने वाले "लेनदेन में निष्क्रिय" का अर्थ अक्सर यह होता है कि लेन-देन को "प्रतिबद्ध" या "रोलबैक" के साथ समाप्त नहीं किया गया था, जिसका अर्थ है कि एप्लिकेशन छोटी है या लेनदेन संबंधी डेटाबेस के साथ काम करने के लिए ठीक से डिज़ाइन नहीं किया गया है। लंबे समय तक चलने वाले "निष्क्रिय लेन-देन" से बचना चाहिए, क्योंकि इससे प्रदर्शन संबंधी बड़ी समस्याएं भी हो सकती हैं।