2013-10-07 7 views
6

मैं आज postgres का उपयोग में postgres डेटाबेस को बहाल करने और एक समस्या मिला मैं डेटाबेस डंप कैसे इस तरहएक और डेटाबेस नाम

pg_dump zeus_development -U test > zeus_development.dump.out 

क्या हुआ अगर मैं एक और डेटाबेस zeus_production

को बहाल करने के लिए चाहता हूँ मैं कैसे कर सकता हूँ फिर,

createdb -U test -T template0 zeus_production 

इस डेटाबेस पर अपने डंप बहाल:,

psql -U test zeus_production -f /path/to/zeus_development.dump.out 

जब बहाल करने, हमेशा template0 स्पष्ट का उपयोग के रूप में यह है

+1

साइड नोट - सादा पाठ के बजाय बाइनरी डंप प्रारूप में से एक का उपयोग करना बेहतर हो सकता है। यह डंप/पुनर्स्थापना प्रक्रिया को तेज करेगा, डंप फ़ाइल के आकार को कम कर देगा और बहाली प्रक्रिया को नियंत्रित करने के कुछ अतिरिक्त तरीके प्रदान करेगा। विवरण ['यहां'] (http://www.postgresql.org/docs/current/static/app-pgdump.html) –

उत्तर

14

सरल, पहले अपने डेटाबेस template0 का उपयोग कर अपने template database के रूप में बनाने के हमेशा एक खाली और अपरिवर्तनीय डेटाबेस। यदि आप एक स्पष्ट टेम्पलेट का उपयोग नहीं करते हैं, तो PostgreSQL template1 मान लेगा, और यदि इसमें कुछ ऑब्जेक्ट्स हैं, जैसे कि आपके डंप किए गए डेटाबेस में पहले से मौजूद टेबल या फ़ंक्शन, आपको पुनर्स्थापित करते समय कुछ त्रुटियां मिलेंगी।

फिर भी, यदि आप एक ही नाम (zeus_development) वाले डेटाबेस पर पुनर्स्थापित कर रहे थे, तो आपको इसे उसी तरह बनाना (या फिर से बनाना) बनाना चाहिए। जब तक आप -C विकल्प का उपयोग नहीं करते हैं, तो pg_restore के -C बाइनरी डंप का उपयोग करते समय), जो मैं अनुशंसा नहीं करता, क्योंकि आपको कम लचीलापन (जैसे किसी भिन्न डेटाबेस नाम पर पुनर्स्थापित करना) प्रदान करेगा।

0

क्या यह निम्नलिखित करना आसान नहीं है?

createdb -U test -T zeus_development zeus_production 
+0

वास्तव में, उपर्युक्त काम करता है। मूल प्रश्न में उल्लेख नहीं किया गया कि वह एक नई मशीन पर जा रहा था। यह अभी माना गया था। -टी विकल्प काफी शक्ति है। – pedz

2

PostgresSQL दस्तावेज़ ने मुझे कस्टम प्रारूप का उपयोग करने के लिए प्रभावित किया है। मैं इसे वर्षों से उपयोग कर रहा हूं और ऐसा लगता है कि यह कई फायदे हैं लेकिन वाईएमएमवी। जैसा कि कहा गया है, यहाँ क्या मेरे लिए काम किया है:

pg_restore --no-owner --dbname postgres --create ~/Desktop/pg_dump 
psql --dbname postgres -c 'ALTER DATABASE foodog_production RENAME TO foodog_development' 

अनुक्रम से पहले मौजूदा कोई foodog_development है और न ही foodog_production डेटाबेस हुई थी।

यह डंप (~/डेस्कटॉप/pg_dump) से डेटाबेस को पुनर्स्थापित करता है जो इसे उस नाम से बना देगा जिसे इसे डंप किया गया था। नाम जो भी आप चाहते हैं डीबी को नाम दें।

यदि आपका उपयोगकर्ता नाम दोनों मशीनों पर समान है तो --no-owner की आवश्यकता नहीं हो सकती है। मेरे मामले में, डंप उपयोगकर्ता 1 के रूप में किया गया था और उपयोगकर्ता 2 के रूप में बहाल किया गया था। नई वस्तुओं को उपयोगकर्ता 2 के स्वामित्व की आवश्यकता है और - कोई मालिक इसे प्राप्त नहीं करता है।

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