2010-08-19 7 views
17

मैं एक से दूसरे हार्ड ड्राइव से मेरी PostgreSQL डेटाबेस ले जाया गया का उपयोग करpg_dump और psql यू postgres db_name के साथ एक डेटाबेस बढ़ते <... "त्रुटि: संबंध" में परिणाम TABLE_NAME "मौजूद नहीं है"

pg_dump -U postgres db_name > db_name.dump 

और फिर

psql -U postgres db_name < db_name.dump 

मैंने दोनों उदाहरणों में डेटाबेस db_name को उसी तरह बनाया है।

"ERROR: relation "table1" does not exist" 

क्वेरी है:

select count(0) from table1 

मैं जानता हूँ कि मैं एक मिल गया है नया डेटाबेस जब मैं एक जेपीए क्वेरी (या एक JDBC क्वेरी) के साथ अपने जावा कार्यक्रम चलाने में मैं इस त्रुटि मिलती है कनेक्शन क्योंकि अगर मैं कनेक्शन पैरामीटर में पासवर्ड बदलता हूं तो मुझे एक त्रुटि मिलती है।

नए PostgresQL उदाहरण में किसी कारण से यह सोचता है कि तालिका 1 आयातित स्कीमा में मौजूद नहीं है।

अगर मैं

करने के लिए क्वेरी

चयन गिनती (0) से myschema.table1

तो यह अनुमतियों के बारे में शिकायत बदलने के लिए:

"ERROR: permission denied for schema myschema" 

क्यों अनुमतियाँ भिन्न होगा?

तालिका तालिका 1 myschema में मौजूद है क्योंकि मैं इसे pgAdmin टूल में देख सकता हूं। सभी पंक्तियों को नए PostgresQL उदाहरण में आयात किया गया था।

जब मैं जावा से एक क्वेरी करता हूं तो pg_dump और psql के संयोजन ने एक समस्या बनाई है।

इस समस्या को हल करने के लिए मुझे क्या करने की आवश्यकता है?

अग्रिम धन्यवाद।

उत्तर

28

क्या आप PostgreSQL के उसी संस्करण पर जा रहे हैं? यदि आप pg_dump 8.3 के साथ डंप बनाते हैं और Postgresql 8.4 में इसे पुनर्स्थापित करने का प्रयास करते हैं तो समस्याएं हो सकती हैं। वैसे भी, यह सोचते हैं यह है कि एक ही संस्करण निम्न प्रयास करें: इस तरह के उपयोगकर्ताओं और समूहों (अगर वे अपने डंप में लापता थे पता नहीं है) के रूप में

डंप सभी वैश्विक वस्तुओं,:

pg_dumpall -g -U postgres > globals.sql 

डंप स्कीमा

pg_dump -Fp -s -v -f db-schema.sql -U postgres dbname 

डंप डेटाबेस की सामग्री: डेटाबेस का

pg_dump -Fc -v -f full.dump -U postgres dbname 

अब रेस फाड़ दिया।

psql -f globals.sql 
psql -f db-schema.sql dbname 
pg_restore -a -d dbname -Fc full.dump 

यह मेरा $ 0.02 है। आशा करता हूँ की ये काम करेगा।

+0

मैं 8.3 से 8.4 तक बढ़ रहा हूं। मैं आपके अधिक व्यापक दृष्टिकोण का उपयोग करने के लिए अपनी बैकअप स्क्रिप्ट बदल दूंगा। जवाब के लिए धन्यवाद। –

+1

मैं बड़े डेटाबेस के लिए pg_restore में verbose flag (-v) जोड़ दूंगा। 'pg_restore -a -v -d dbname -Fc full.dump' – green0range

+0

यदि आप' pg_restore -a' पर जा रहे हैं तो स्कीमा को दो बार (सादे टेक्स्ट और संपीड़ित) में डंप करने का क्या मतलब है? उदाहरण के लिए, 'pg_dump -Fc -a -v -f data.dump' क्यों नहीं? या स्कीमा चरण को पूरी तरह से छोड़ दें, और केवल एक चरण में ग्लोबल्स और दूसरे में बाकी सब कुछ करें? – Air

1

मैं सार्वजनिक कनेक्शन और सार्वजनिक और पोस्टग्रेस = यूएसएजी और CREATE के लिए स्कीमा विशेषाधिकारों को डेटाबेस विशेषाधिकारों को बदलकर इसे हल करने में सक्षम था।

मेरी बैकअप स्क्रिप्ट स्पष्ट रूप से विशेषाधिकारों को संरक्षित नहीं करती थी, कम से कम 8.3 से 8.4 तक नहीं चलती थी।

2

मुझे इस समस्या का सामना करना पड़ा। तब मुझे एहसास हुआ कि मैं postgis एक्सटेंशन इंस्टॉल करना भूल गया था।

आपके द्वारा उपयोग किए जाने वाले एक्सटेंशन को इंस्टॉल करना न भूलें।

+0

बहुत धन्यवाद आदमी। यह मुद्दा था कि मैं घंटों तक संघर्ष कर रहा था। पोस्टगिस अस्तित्व के बारे में भी नहीं पता था, मैं दुनिया को पोस्ट करने के लिए नया हूं। रेपो से बस पोस्टगिस स्थापित किया गया और सभी काम किया। –

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