PostgreSQL: कमांड लाइन के माध्यम से PostgreSQL डेटाबेस छोड़ें [बंद]


321

मैं अपने डेटाबेस को छोड़ने और कमांड लाइन के माध्यम से एक नया बनाने की कोशिश कर रहा हूं।

मैं उपयोग करने में लॉग इन करता हूं psql -U usernameऔर फिर ए करता हूं \connect template1, उसके बाद एDROP DATABASE databasename;

मुझे त्रुटि मिलती है

डेटाबेस डेटाबेसन को अन्य उपयोगकर्ताओं द्वारा एक्सेस किया जा रहा है

मैंने अपाचे को बंद कर दिया और फिर से कोशिश की, लेकिन मुझे अभी भी यह त्रुटि मिल रही है। क्या मुझसे कुछ गलत हो रही है?


2
यदि आप केवल dropdb databasenameकमांड लाइन से कमांड चलाते हैं तो क्या होगा ?
डायलन मार्को

1
यह कहता है "ERROR: वर्तमान में खुले डेटाबेस को नहीं छोड़ सकता"
iman453

4
उपयोग psql -U <user> -c "drop database protodb"(डेटाबेस नाम के बिना)
उपयोगकर्ता

3
यह पोस्टग्रेट्स को फिर से शुरू करेगा और सभी को डिस्कनेक्ट करेगा: sudo service postgresql पुनरारंभ तब करें: a: dropdb -h localhost -p 5432 -U "youruser" "testdb" "" को ध्यान दें कि यह सुनिश्चित करने के लिए कि कोई विशेष अड़चन न हो।
अपराह्न

drop database <dataabase_name>;अल्पविराम को मत भूलना।
संदीप सूबेदारि

जवाबों:


455

आप कमांड लाइन से ड्रॉपडब कमांड चला सकते हैं :

dropdb 'database name'

ध्यान दें कि आपको इसे छोड़ने में सक्षम होने के लिए एक सुपरयुसर या डेटाबेस मालिक होना चाहिए।

आप यह देखने के लिए pg_stat_activity दृश्य की जांच कर सकते हैं कि वर्तमान में आपके डेटाबेस के खिलाफ किस तरह की गतिविधि हो रही है, जिसमें सभी निष्क्रिय प्रक्रियाएं शामिल हैं।

SELECT * FROM pg_stat_activity WHERE datname='database name';

3
मैं dropuserभी उपयोगकर्ता को हटाने के लिए कमांड का उपयोग कर रहा हूं ।
pl1nk

6
संस्करण 9 के लिए उपयोगी उत्तर नहीं। खुले कनेक्शन के बारे में त्रुटि अभी भी प्रकट होती है।
पावेल Vlasov

4
यह पोस्टग्रेज को फिर से शुरू करेगा और सभी को डिसकनेक्ट करेगा: sudo service postgresql पुनरारंभ तब करें: a: dropdb -h localhost -p 5432 -U "youruser" "testdb" "" को नोटिस करें "" सुनिश्चित करें कि कोई विशेष अड़चन न हो।
अनोम

1
उपयोगकर्ता का उपयोग करने के बाद: sudo -u postdes ड्रॉपडब 'डेटाबेस नाम'
leszek.hanusz

\lआपके पास सभी डेटाबेस देखने के लिए।
संदीप सूबेदारि

115

यह मेरे लिए काम किया:

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

9.2 से पहले postgresql के pidसाथ बदलेंprocpid

DROP DATABASE "YourDatabase";

http://blog.gahooa.com/2010/11/03/how-to-force-drop-a-postgresql-database-by-killing-off-connection-processes/


12
इसे काम करने के लिए थोड़ा बदलना पड़ा:select pg_terminate_backend(pid) from pg_stat_activity where datname='YourDatabase';
mrt

column "procpid" does not exist
अमेज़ॅन के

हम्म। इसे दौड़ाओ, लेकिन यह तुरंत ठीक हो गया, यह कहने के बाद, "SSL कनेक्शन अप्रत्याशित रूप से बंद हो गया [...] रीसेट करने का प्रयास: सफल हुआ।" ऐन्ड, आई एम बैक।
19

67

इसे इस्तेमाल करे। नोट कोई डेटाबेस निर्दिष्ट नहीं है - यह "सर्वर पर" चलता है

psql -U postgres -c "drop database databasename"

अगर वह काम नहीं करता है, तो मैंने अनाथों के लिए तैयार किए गए बयानों को पकड़ते हुए एक समस्या देखी है।
उन्हें साफ करने के लिए, यह करें:

SELECT * FROM pg_prepared_xacts;

फिर प्रत्येक आईडी के लिए आप इसे देखें:

ROLLBACK PREPARED '<id>';

क्षमा करें, मैं डेटाबेस में नया हूं, इसलिए यह शायद एक बेवकूफ सवाल है, लेकिन मैं इसे कहां टाइप करूं? डेटाबेस में प्रवेश करने से पहले सही है? और मुझे अपने डेटाबेस के नाम के साथ डेटाबेसन को सही से बदलना चाहिए?
iman453

@ iman453: आप अपने शेल / कमांड-लाइन से सीधे चलते हैं।
म्यू

2
Postgresql के लिए "सिर्फ सर्वर पर" जैसी कोई चीज नहीं है। आपको एक डेटाबेस से कनेक्ट होना चाहिए। इस मामले में आप पोस्टग्रेज डेटाबेस से जुड़ेंगे जो इस तरह के मामलों के लिए बहुत ज्यादा है। और तैयार लेनदेन पर एक अच्छा बिंदु है, लेकिन उस मामले में आपको एक त्रुटि संदेश प्राप्त करना चाहिए, जिसमें कहा गया है कि यह मुद्दा है।
स्कॉट मार्लो

1
सॉरी बोहेमियन, लेकिन आप गलत हैं। कमांड लाइन से createb चलाते समय यहाँ pg_stat_activity है: pg_stat_activity से postgres = # select *; 11564 | पोस्टग्रेट्स | 22223 | 16384 | स्मार्लो | जन्म दिन परीक्षण; | च | 2011-08-19 16: 18: 26.918933-06 | 2011-08-19 16: 18: 26.918933-06 | 2011-08-19 16: 18: 26.916578-06 | | -1 ध्यान दें कि कमांड लाइन से दूसरे टर्मिनल में createb चलाते समय ऐसा होता है। यह पहला क्षेत्र है db कि मेरी बनाई स्क्रिप्ट स्क्रिप्ट से जुड़ी हुई थी
स्कॉट मारलो

1
यह शीर्ष, # 1 उत्तर क्यों नहीं है?
हेन्ले चियु

16

जब यह कहता है कि उपयोगकर्ता जुड़े हुए हैं, तो क्वेरी "pg_stat_activity से" का चयन क्या करता है; कहते हैं? क्या आपके अलावा अन्य उपयोगकर्ता अब जुड़े हुए हैं? यदि ऐसा है, तो आपको अपने pg_hba.conf फ़ाइल को अन्य उपयोगकर्ताओं से कनेक्शन अस्वीकार करने के लिए संपादित करना पड़ सकता है, या जो भी ऐप pg डेटाबेस तक पहुंच रहा है उसे बंद करने में सक्षम हो। मुझे उत्पादन के अवसर पर यह समस्या है। Pg_hba.conf को दो पंक्तियों की तरह सेट करें:

local   all         all                               ident
host    all         all         127.0.0.1/32          reject

और पुनः लोड या पुनः लोड करने के लिए pgsql (यानी या तो sudo /etc/init.d/postgresql reload या pg_ctl पुनः लोड करें) और अब अपनी मशीन से कनेक्ट करने का एकमात्र तरीका स्थानीय सॉकेट्स है। मैं मान रहा हूँ कि आप linux पर हैं। यदि ऐसा नहीं है तो उस पहली पंक्ति पर स्थानीय / पहचान के अलावा किसी अन्य चीज़ से जुड़ने की आवश्यकता हो सकती है, जैसे कि मेजबान ... yourusername।

अब आपको ऐसा करने में सक्षम होना चाहिए:

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