PostgreSQL * में , आप एक डेटाबेस को नहीं छोड़ सकते जबकि ग्राहक इससे जुड़े हैं।
कम से कम, dropdb
उपयोगिता के साथ नहीं - जो कि DROP DATABASE
सर्वर क्वेरी के आसपास केवल एक साधारण आवरण है ।
काफी मजबूत समाधान इस प्रकार है:
सुपर सर्वर के रूप में , psql
या अन्य क्लाइंट का उपयोग करके अपने सर्वर से कनेक्ट करें । करो नहीं डेटाबेस आप ड्रॉप करना चाहते हैं का उपयोग करें।
psql -h localhost postgres postgres
अब सादे डेटाबेस क्लाइंट का उपयोग करके आप तीन आसान चरणों का उपयोग करके डेटाबेस को छोड़ सकते हैं:
सुनिश्चित करें कि कोई भी इस डेटाबेस से जुड़ नहीं सकता है। आप निम्न विधियों में से एक का उपयोग कर सकते हैं (दूसरा अधिक सुरक्षित लगता है, लेकिन सुपरसर्स से कनेक्शन को नहीं रोकता है)।
/* Method 1: update system catalog */
UPDATE pg_database SET datallowconn = 'false' WHERE datname = 'mydb';
/* Method 2: use ALTER DATABASE. Superusers still can connect!
ALTER DATABASE mydb CONNECTION LIMIT 0; */
इस डेटाबेस से जुड़े सभी क्लाइंट के फोर्स डिस्कनेक्ट का उपयोग करके pg_terminate_backend
।
SELECT pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE datname = 'mydb';
/* For old versions of PostgreSQL (up to 9.1), change pid to procpid:
SELECT pg_terminate_backend(procpid)
FROM pg_stat_activity
WHERE datname = 'mydb'; */
डेटाबेस ड्रॉप करें।
DROP DATABASE mydb;
चरण 1 के लिए 1 विधि के लिए सुपरसुसर विशेषाधिकारों की आवश्यकता है , और दूसरे के लिए डेटाबेस के मालिक के विशेषाधिकार। चरण 2 में सुपरसुसर विशेषाधिकारों की आवश्यकता होती है । चरण 3 के लिए डेटाबेस स्वामी विशेषाधिकार की आवश्यकता होती है ।
* यह PostgreSQL के सभी संस्करणों पर लागू होता है, संस्करण 11 तक।