PostgreSQL - डेटाबेस का नाम बदलें


126

मुझे डेटाबेस का नाम बदलने की आवश्यकता है लेकिन जब मैं करता हूं PGAdmin : ALTER DATABASE "databaseName" RENAME TO "databaseNameOld" मुझे बताया कि यह नहीं हो सकता।

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

( WindowsXP पर संस्करण 8.3 )

अपडेट करें

  • पहला त्रुटि संदेश: नहीं कर सकता क्योंकि मैं इससे जुड़ा था। इसलिए मैंने एक अन्य डेटाबेस का चयन किया और प्रश्नों को किया।

  • मुझे एक दूसरा त्रुटि संदेश मिला है जिसमें कहा गया है कि यह उपयोगकर्ता से जुड़ गया है। मैं PGAdminस्क्रीन में देखता हूं कि इसमें कई हैं PIDलेकिन वे निष्क्रिय हैं ... मैं नहीं देखता कि उन्हें कैसे मारूं।


1
आप इसे विस्तृत क्यों नहीं कर सकते। मैंने अभी यह किया (हालांकि एक अलग मंच पर) और इसने काम किया
विंको व्रास्लोविक

1
सटीक त्रुटि संदेश क्या है और क्या आपने यह त्रुटि पोस्टग्रोज़ डॉक्स में देखी है? शायद उस व्यवहार का एक सही कारण है। सामान्य रूप से नाम बदलने के लिए काम करना चाहिए।
अनएक्सपर्ट सेप 27'08

अपडेट किया गया सवाल देखें
पैट्रिक डेसजार्डिन्स

सिर्फ डेटाबेस को पुनरारंभ क्यों नहीं किया?
अनएक्सपेक्ट

सटीक त्रुटि संदेश क्या है और क्या आपने यह त्रुटि पोस्टग्रोज़ डॉक्स में देखी है? शायद उस व्यवहार का एक सही कारण है। सामान्य रूप से नाम बदलने के लिए काम करना चाहिए। यदि आपको लंबित या मृत कनेक्शन की समस्या है, तो उनसे छुटकारा पाने के लिए डेटाबेस को पुनः आरंभ करें।
अनएक्सपेक्ट

जवाबों:


189

डेटाबेस नाम को उद्धृत न करने का प्रयास करें:

ALTER DATABASE people RENAME TO customers;

यह भी सुनिश्चित करें कि उस समय डेटाबेस से जुड़े अन्य ग्राहक नहीं हैं। अंत में, त्रुटि संदेश पोस्ट करने का प्रयास करें, ताकि हम थोड़ा और जानकारी प्राप्त कर सकें।


18
जब नाम में बड़े अक्षर हों तो उद्धृत करना आवश्यक है।
पैट्रिक डेसजार्डिन्स

7
यह मामला नहीं है, लेकिन जब नाम है .या तो उद्धृत करना भी आवश्यक है @
omar

6
जब नाम में एक-
GreenTurtle

उपरोक्त सुझाव मुझे लगता है कि यदि संभव हो तो केवल लोअरकेस अक्षरों और अंडरस्कोर तक सीमित टेबल नामों को रखना बेहतर है!
अश्विन सनाकन

जब खाली जगह होती है
कोटिंग

86

भविष्य के संदर्भ के लिए, आपको निम्न करने में सक्षम होना चाहिए:

-- disconnect from the database to be renamed
\c postgres

-- force disconnect all other clients from the database to be renamed
SELECT pg_terminate_backend( pid )
FROM pg_stat_activity
WHERE pid <> pg_backend_pid( )
    AND datname = 'name of database';

-- rename the database (it should now have zero clients)
ALTER DATABASE "name of database" RENAME TO "new name of database";

ध्यान दें कि तालिका pg_stat_activityस्तंभ को 9.2 से पहले के संस्करणों में pidनामित किया गया था procpid। इसलिए यदि आपका PostgreSQL संस्करण 9.2 से कम है, तो procpidइसके बजाय का उपयोग करें pid


3
यह मेरे लिए काम किया, thanx! लेकिन pg_stat_activity में कॉलम का नाम pid है और procpid नहीं है। ( PostgreSQL 9.3.5 on x86_64-apple-darwin, compiled by i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.9.00), 64-bit)
बोडमैन

7

मैं बस इसमें भाग गया और नीचे काम किया है:

1) pgAdminसत्रों में से एक है। psqlइसके बजाय उपयोग करें ।
2) pgBouncerविंडोज पर और / या शेड्यूलर सेवाओं को रोकें क्योंकि ये भी सत्र बनाते हैं


3

Unexist ने मुझे डेटाबेस को पुनः आरंभ करने के लिए टिप्पणी में कहा था और यह काम करता है! डेटाबेस को पुनरारंभ करना सभी मौजूदा कनेक्शन को मारता है और फिर मैं दूसरे डेटाबेस से जुड़ता हूं और अपनी प्रारंभिक क्वेरी के साथ इसका नाम बदलने में सक्षम था।

Thx सब।


3

एक nuke को तैनात करने (सर्वर को पुनरारंभ करने) के बजाय आपको उन कनेक्शनों को बंद करने का प्रयास करना चाहिए जो आपको परेशान करते हैं या तो यह पता लगा सकते हैं कि वे कहाँ से हैं और क्लाइंट प्रक्रियाओं को बंद कर रहे हैं या pg_cancel_backend()फ़ंक्शन का उपयोग कर रहे हैं।


0

DBeaver का उपयोग करते हुए और इस तरह एक त्रुटि संदेश प्राप्त करने वाले किसी भी व्यक्ति के लिए इस मुद्दे में:

ERROR: database "my_stubborn_db" is being accessed by other users
  Detail: There is 1 other session using the database.

अपने वर्तमान कनेक्शन को डिस्कनेक्ट करें, और उसी सर्वर के साथ फिर से कनेक्ट करें जो उस डेटाबेस को लक्षित नहीं करता है जिसका आप नाम बदल रहे हैं।

सक्रिय डेटाबेस को बदलना पर्याप्त नहीं है।

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