मैं बैकअप के लिए pg_dump / pg_restore का उपयोग कर रहा हूं और PostgreSQL डेटाबेस को पुनर्स्थापित करता हूं, लेकिन pg_restore से कुछ त्रुटि संदेश (और एक गैर-शून्य निकास स्थिति) प्राप्त कर रहा हूं। मैंने एक सुपर सरल आधार मामले की कोशिश की (नीचे उल्लिखित) लेकिन फिर भी ये त्रुटियां मिलीं:
pg_restore: [संग्रहकर्ता (db)] TOC को संसाधित करते समय त्रुटि: pg_restore: [archiver (db)] TOC प्रविष्टि 5 से त्रुटि; 2615 2200 SCHEMA जनता ने पोस्ट किया pg_restore: [archiver (db)] क्वेरी निष्पादित नहीं कर सका: ERROR: स्कीमा "सार्वजनिक" पहले से मौजूद है कमान थी: सृजन स्कीमा जनता;
प्रजनन करने कि प्रक्रिया:
- एक नया, वैनिला उबंटू 14.04 डिस्ट्रो स्थापित करें (मैं इस वैग्रंट बॉक्स के साथ वैग्रैंट का उपयोग कर रहा हूं )।
- PostgreSQL 9.3 स्थापित करें, किसी भी लिनक्स उपयोगकर्ता से PostgreSQL उपयोगकर्ता "पोस्टग्रेज" के रूप में स्थानीय कनेक्शन की अनुमति देने के लिए कॉन्फ़िगर करें।
एक परीक्षण डेटाबेस बनाएँ। मैं बस कर रहा हूँ:
योनि @ योनि-उबंटु-भरोसेमंद -64: ~ $ psql --username = पोस्टग्रेज psql (9.3.5) मदद के लिए "मदद" टाइप करें। postgres = # create डेटाबेस mydb; DATABASE बनाएं postgres = # \ q vagant @ vagrant-ubuntu-trusty-64: ~ $ psql --username = mydb पोस्ट करता है psql (9.3.5) मदद के लिए "मदद" टाइप करें। mydb = # तालिका डेटा (प्रविष्टि बिगिंट) बनाएं; तालिका बनाएं mydb = # डेटा मानों में डालें (1); INSERT 0 1 mydb = # डेटा मानों में डालें (2); INSERT 0 1 mydb = # डेटा मानों में डालें (3); INSERT 0 1 mydb = # \ q
डेटाबेस का बैकअप बनाएं जैसे:
PGPASSWORD = "postgres" pg_dump --dbname = mydb --username = postgres --format = custom> pg_backup.dump
Mydb में डेटा टेबल से कुछ पंक्तियों को हटा दें ताकि हम यह बता सकें कि क्या हमने डेटा को सफलतापूर्वक पुनर्स्थापित किया है।
डेटाबेस को इसके साथ पुनर्स्थापित करें:
PGPASSWORD = "postgres" pg_restore --clean --create --dbname = postgres --username = postgres pg_backup.dump
डेटा को पुनर्स्थापित किया जाता है, लेकिन चरण 6 में pg_restore कमांड स्थिति से बाहर निकलता है 1
और निम्न आउटपुट दिखाता है:
pg_restore: [संग्रहकर्ता (db)] TOC को संसाधित करते समय त्रुटि: pg_restore: [archiver (db)] TOC प्रविष्टि 5 से त्रुटि; 2615 2200 SCHEMA जनता ने पोस्ट किया pg_restore: [archiver (db)] क्वेरी निष्पादित नहीं कर सका: ERROR: स्कीमा "सार्वजनिक" पहले से मौजूद है कमान थी: सृजन स्कीमा जनता; चेतावनी: त्रुटियों को बहाल करने पर ध्यान नहीं दिया: 1
मैं इसे अनदेखा नहीं कर सकता क्योंकि मैं इस कमांड को प्रोग्रामेटिक रूप से चला रहा हूं और रिस्टोर फेल होने या न होने के लिए एक्जिट स्टेटस का इस्तेमाल करने की जरूरत है। प्रारंभ में, मुझे आश्चर्य हुआ कि क्या यह समस्या थी क्योंकि मैंने अपने डेटाबेस को सार्वजनिक (डिफ़ॉल्ट स्कीमा) में रखा था। मैंने तर्क दिया कि --create
डेटा को पुनर्स्थापित करने से पहले pg_restore द्वारा विकल्प के परिणामस्वरूप सार्वजनिक बनाया जाएगा (जो अनुमान लगा सकता है कि स्कीमा बनाने की कोशिश तब से की जा सकती है, जहां मेरी तालिका है), लेकिन जब मैंने अपनी तालिका के लिए उपरोक्त चरणों की कोशिश की। एक अलग स्कीमा में, परिणाम समान थे और त्रुटि संदेश समान थे।
क्या मुझसे कुछ ग़लत हो रहा है? मुझे यह त्रुटि क्यों दिखाई दे रही है?
--create
बिना निर्दिष्टclean
करने से समस्या ठीक नहीं होती है।