PostgreSQL डेटाबेस में SQL डंप आयात करें


451

हम मेजबानों को स्विच कर रहे हैं और पुराने ने हमारी साइट के PostgreSQL डेटाबेस का एक SQL डंप प्रदान किया है।

अब, मैं इसे परीक्षण करने के लिए एक स्थानीय WAMP सर्वर पर स्थापित करने का प्रयास कर रहा हूं।

एकमात्र समस्या यह है कि मुझे इस बात का अंदाजा नहीं है कि इस डेटाबेस को पोस्टग्रेक्यूएल 9 में कैसे आयात किया जाए जो मैंने स्थापित किया है।

मैंने pgAdmin III की कोशिश की, लेकिन मैं एक 'आयात' फ़ंक्शन खोजने के लिए प्रतीत नहीं कर सकता। इसलिए मैंने सिर्फ SQL संपादक को खोला और डंप की सामग्री को वहां पेस्ट किया और इसे निष्पादित किया, यह तालिकाओं को बनाता है, लेकिन जब डेटा इसमें डालने की कोशिश करता है तो यह मुझे त्रुटियां देता रहता है।

ERROR:  syntax error at or near "t"
LINE 474: t 2011-05-24 16:45:01.768633 2011-05-24 16:45:01.768633 view...

The lines:
COPY tb_abilities (active, creation, modtime, id, lang, title, description) FROM stdin;
t   2011-05-24 16:45:01.768633  2011-05-24 16:45:01.768633  view    nl ...  

मैंने कमांड प्रॉम्प्ट के साथ भी ऐसा करने की कोशिश की है, लेकिन मुझे वह कमांड नहीं मिल रही है जिसकी मुझे आवश्यकता है।

यदि मैं करता हूँ

psql mydatabase < C:/database/db-backup.sql;

मुझे त्रुटि मिलती है

ERROR:  syntax error at or near "psql"
LINE 1: psql mydatabase < C:/database/db-backu...
        ^

डेटाबेस आयात करने का सबसे अच्छा तरीका क्या है?


मुझे आपके पहले वाले के समान त्रुटि मिली थी ERROR: syntax error at or near "t":। यह पता चला कि मैंने केवल एक आंशिक स्कीमा आयात किया था और इस प्रकार CREATE TABLEस्क्रिप्ट में पहले एक बयान विफल हो गया था। इसे खोजने के लिए आयात का पूरा आउटपुट देखें।
ओवेन्समार्टिन

जवाबों:


732
psql databasename < data_base_dump

वह आज्ञा जिसे आप ढूंढ रहे हैं।

खबरदार: databasenameआयात करने से पहले बनाया जाना चाहिए। PostgreSQL डॉक्स अध्याय 23 पर एक नजर डालें । बैकअप और पुनर्स्थापना


1
मैंने कोशिश की है कि psql mydatabase <C: \ database \ db-backup.sql, लेकिन मुझे त्रुटि अमान्य कमांड \ डेटाबेस से मिलती है। मैंने इसके चारों ओर "" के साथ भी प्रयास किया।
चकाचौंध

23
@Dazz को आपको अपने कमांड प्रॉम्प्ट (स्टार्ट -> रन -> cmd) से करना होगा, पोस्टग्रेज प्रॉम्प्ट से नहीं।
जैकब

2
अगर मैं इसे cmd से चलाता हूं तो मुझे 'द <' ऑपरेटर भविष्य के उपयोग के लिए आरक्षित है। '
चकाचौंध

3
@ डैज़: आप -fस्विच का उपयोग कर सकते हैं (या --file)
ग्रेज़गोरज़ स्ज़ेपकोव्स्की

47
psql --username = डेटाबेससेन <data_base_dump.sql
Maxence

356

यहां वह कमांड है जिसे आप ढूंढ रहे हैं।

psql -h hostname -d databasename -U username -f file.sql

29
अच्छा है, लेकिन बेहतर परिशिष्ट फ़ाइल पर आउटपुट लॉग करने के लिए "-L logfile.log" परम भी है।
zerologiko

2
इसे प्राप्त करना "इनपुट एक PostgreSQL कस्टम-प्रारूप डंप है। इस डंप को एक डेटाबेस में पुनर्स्थापित करने के लिए pg_restore कमांड-लाइन क्लाइंट का उपयोग करें।"
वाजदन अली

3
आप यह भी कर सकते हैं:pg_restore -h hostname -d dbname -U username filename.sql
Fábio Araújo

114

मेरा मानना ​​है कि आप psql में भागना चाहते हैं:

\i C:/database/db-backup.sql

इसका उपयोग करना पड़ा क्योंकि Emacs का एस्केले इनपुट पुनर्निर्देशन का समर्थन नहीं करता है। धन्यवाद।
ड्यूमा

3
पहले डेटाबेस में \ c <database_name>
hkong


49

मुझे यकीन नहीं है कि यह ओपी की स्थिति के लिए काम करता है, लेकिन मैंने पाया कि इंटरैक्टिव कंसोल में निम्न कमांड चलाना सबसे आसान समाधान था:

\i 'path/to/file.sql'

बस सुनिश्चित करें कि आप पहले से ही सही डेटाबेस से जुड़े हैं। यह कमांड निर्दिष्ट फ़ाइल में SQL कमांड के सभी को निष्पादित करता है।


1
इस समाधान ने मेरे लिए काम किया, जबकि सबसे अधिक मतदान समाधान "स्टड एक ट्टी नहीं" त्रुटि है।

बस मैं क्या देख रहा था - psqlकमांड लाइन के अंदर से स्क्रिप्ट को निष्पादित करने का एक तरीका । धन्यवाद!
vatsug

बस इसके लिए आपको धन्यवाद देना चाहता था। सही उत्तर में शामिल होना चाहिए।
PKHunter

यह सही है, खिड़कियों में पथ में बैक-स्लैश का उपयोग न करें!
एर्डिनि आइ

विंडोज के लिए भी, आपको डबल-फॉरवर्ड स्लैश की जरूरत है
CMAS

44

बहुत अच्छी तरह से काम करता है, कमांड लाइन में, सभी तर्क आवश्यक हैं, -W पासवर्ड के लिए है

psql -h localhost -U user -W -d database_name -f path/to/file.sql

22

सिर्फ फंसी के लिए, यदि आपका डंप संकुचित है तो आप कुछ ऐसा कर सकते हैं

gunzip -c filename.gz | psql dbname

जैसा कि याकूब ने उल्लेख किया है, PostgreSQL डॉक्स यह सब काफी अच्छी तरह से वर्णन करता है।


7

मैं उपयोग करता हूं:

cat /home/path/to/dump/file | psql -h localhost -U <user_name> -d <db_name>

आशा है कि यह किसी की मदद करेगा।


4

आप इसे pgadmin3 में कर सकते हैं। आपके डंप में शामिल स्कीमा (एस) को गिराएं। फिर डेटाबेस पर राइट-क्लिक करें और रिस्टोर चुनें। फिर आप डंप फ़ाइल के लिए ब्राउज़ कर सकते हैं।


2
लेकिन .sql फ़ाइल का चयन करने के बाद भी 'रिस्टोर' बटन क्लिक-सक्षम नहीं है। यह सॉफ़्टवेयर कुछ अन्य तरह की फ़ाइल चाहता है - एक .backup प्रारूप के साथ। उस आयात-बॉक्स पर 'मदद' पर क्लिक करने से pg_restore - "... एक गैर-सादा-पाठ प्रारूप में pg_dump द्वारा बनाए गए संग्रह से PostgreSQL डेटाबेस को पुनर्स्थापित करने के लिए एक उपयोगिता को संदर्भित करता है।" ओपी को संदर्भित एसक्यूएल फ़ाइल एक सादा-पाठ प्रारूप है।
जोसेफ

4

मैंने देखा कि बहुत से उदाहरण लोकलहोस्ट के लिए ओवरकम्प्लिकेट किए जाते हैं, जहाँ बस उपयोगकर्ता बिना पासवर्ड के पोस्टग्रैजेट करता है, कई मामलों में:

psql -d db_name -f dump.sql

4

सुनिश्चित करें कि आप जिस डेटाबेस को आयात करना चाहते हैं वह बनाया गया है, फिर आप डंप के साथ आयात कर सकते हैं

sudo -u postgres -i psql testdatabase < db-structure.sql

यदि आप पूरे डेटाबेस को अधिलेखित करना चाहते हैं, तो पहले डेटाबेस को छोड़ दें

# be sure you drop the right database !!!
#sudo -u postgres -i psql -c "drop database testdatabase;"

और फिर से इसे फिर से बनाएँ

sudo -u postgres -i psql -c "create database testdatabase;"

2

मैंने अपने पोस्टग्रेज बैकअप को बहाल करने के लिए कई अलग-अलग समाधानों की कोशिश की। मैं MacOS पर समस्याओं से वंचित अनुमति में भाग गया, कोई समाधान काम नहीं कर रहा था।

यहां बताया गया है कि मुझे यह कैसे काम करना है:

Postges Pgadmin4 के साथ आता है। यदि आप macOS का उपयोग करते हैं तो आप CMD+ को दबा सकते हैं SPACEऔर pgadmin4इसे चलाने के लिए टाइप कर सकते हैं । यह क्रोम में एक ब्राउज़र टैब खोलेगा।

यदि आप killall pgAdmin4अपने टर्मिनल में काम करने के लिए pgadmin4 की त्रुटियों में भाग लेते हैं , तो फिर से प्रयास करें।


Pgadmin4 + बैकअप / रिस्टोर करने के चरण

1. बैकअप बनाएँ

डेटाबेस पर राइट-क्लिक करके ऐसा करें -> "बैकअप"

यहां छवि विवरण दर्ज करें

2. फाइल को एक नाम दें।

की तरह test12345। बैकअप पर क्लिक करें। यह एक बाइनरी फ़ाइल डंप बनाता है, यह एक .sqlप्रारूप में नहीं है

यहां छवि विवरण दर्ज करें

3. देखें कि यह कहाँ डाउनलोड हुआ

आपकी स्क्रीन के निचले भाग में एक पॉपअप होना चाहिए। यह देखने के लिए कि आपका बैकअप कहां से डाउनलोड हुआ है, "अधिक विवरण" पृष्ठ पर क्लिक करें

यहां छवि विवरण दर्ज करें

4. डाउनलोड की गई फ़ाइल का स्थान ढूंढें

इस मामले में, यह है /users/vincenttang

यहां छवि विवरण दर्ज करें

5. pgadmin से बैकअप पुनर्स्थापित करें

मान लिया कि आपने चरण 1 से 4 को सही ढंग से किया है, तो आपके पास एक बाइनरी फ़ाइल होगी। ऐसा समय आ सकता है जब आपका सहकर्मी आपकी पुनर्स्थापना फ़ाइल का उपयोग उनकी स्थानीय मशीन पर करना चाहता है। कहा है कि व्यक्ति पगडंडियों पर जाएँ और पुनर्स्थापित करें

डेटाबेस को राइटक्लॉक करके ऐसा करें -> "रिस्टोर" करें

यहां छवि विवरण दर्ज करें

6. फ़ाइल खोजक का चयन करें

मैन्युअल रूप से फ़ाइल स्थान का चयन करना सुनिश्चित करें, pgadmin में अपलोडर फ़ील्ड पर फ़ाइल को ड्रैग और ड्रॉप न करें। क्योंकि आप त्रुटि अनुमतियों में चलेंगे। इसके बजाय, आपके द्वारा बनाई गई फ़ाइल खोजें:

यहां छवि विवरण दर्ज करें

7. उक्त फाइल खोजें

आपको फ़िल्टर को बिल्कुल "सभी फ़ाइलों" में बदलना पड़ सकता है। उसके बाद फ़ाइल को चरण 4 से ढूंढें। अब पुष्टि करने के लिए सबसे नीचे "सिलेक्ट" बटन दबाएं

यहां छवि विवरण दर्ज करें

8. पुनर्स्थापित फ़ाइल कहा

आप इस पृष्ठ को फिर से देखेंगे, चयनित फ़ाइल के स्थान के साथ। आगे बढ़ो और इसे पुनर्स्थापित करें

यहां छवि विवरण दर्ज करें

9. सफलता

यदि सब कुछ अच्छा है, तो नीचे दाईं ओर एक संकेतक को पॉपअप करना चाहिए जो एक सफल पुनर्स्थापना दिखा रहा है। आप यह देखने के लिए अपनी टेबल पर नेविगेट कर सकते हैं कि क्या डेटा को प्रत्येक टेबल पर उचित रूप से बहाल किया गया है।

10. यदि यह सफल नहीं था:

चरण 9 विफल होना चाहिए, अपने डेटाबेस पर अपने पुराने सार्वजनिक स्कीमा को हटाने का प्रयास करें। "क्वेरी टूल" पर जाएं

यहां छवि विवरण दर्ज करें

इस कोड ब्लॉक को निष्पादित करें:

DROP SCHEMA public CASCADE; CREATE SCHEMA public;

यहां छवि विवरण दर्ज करें

अब फिर से 5 से 9 तक कोशिश करें, यह काम करना चाहिए

सारांश

इस तरह मुझे पोस्टग्रेज पर अपने बैकअप को बैकअप / रिस्टोर करना पड़ा, जब मेरे पास त्रुटि अनुमति के मुद्दे थे और एक सुपरयुसर के रूप में लॉग इन नहीं कर सका। या chmodफ़ोल्डरों के लिए उपयोग करके पढ़ने / लिखने के लिए क्रेडेंशियल सेट करें । यह वर्कफ़्लो pgadmin से "कस्टम" के बाइनरी फ़ाइल डंप डिफ़ॉल्ट के लिए काम करता है। मुझे लगता .sqlहै कि यह उसी तरह है, लेकिन मैंने अभी तक इसका परीक्षण नहीं किया है

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