2008-09-27 34 views
84

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

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

(संस्करण 8.3 है Windows XP पर)

अद्यतन

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

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

+1

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

+1

काम करता है सटीक त्रुटि संदेश क्या है और क्या आपने पोस्टग्रेस दस्तावेज़ों में यह त्रुटि देखी है? शायद उस व्यवहार के लिए एक सही कारण है। आम तौर पर नामकरण करना चाहिए। – unexist

+0

अपडेट किया गया प्रश्न –

उत्तर

133

डेटाबेस नाम के हवाले न करने का प्रयास:

ALTER DATABASE people RENAME TO customers; 

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

+12

उद्धरण आवश्यक है जब नाम में पूंजी पत्र है। –

+4

यह मामला नहीं है, लेकिन नाम के पास '.' या' @ 'होने पर उद्धरण भी आवश्यक है। – omar

+1

उद्धरण भी आवश्यक है जब नाम में '-' – GreenTurtle

1

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

Thx सब।

1

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

-- 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 स्तंभ pid 9.2 से पहले के संस्करणों में procpid के रूप में नामित किया गया था:

52

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

1) pdAdmin सत्र में से एक है:

+3

है, यह मेरे लिए काम करता है, thanx! लेकिन pg_stat_activity में कॉलम नाम पिड है और procpid नहीं है। (I8686-apple-darwin11-llvm-gcc-4.2 (जीसीसी) 4.2.1 द्वारा संकलित x86_64-apple-darwin पर postgreSQL 9.3.5, ऐप्पल इंक। 5658 का निर्माण) (एलएलवीएम 2336.9.00 का निर्माण), 64 -bit') – bodman

4

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

संबंधित मुद्दे