2012-06-01 21 views
26

में एक हेरोकू पीजी डंप आयात करने के लिए कैसे मैं अपने विकास मशीन में अपना उत्पादन Heroku डेटाबेस आयात करने की कोशिश कर रहा हूं।स्थानीय मशीन

मेरा स्थानीय डीबी PostgreSQL है।

सबसे पहले, मैं अपने मशीन के लिए Heroku से डंप निर्यात कर रहा हूँ

curl -o latest.dump `heroku pgbackups:url` 

फिर, मैं rake db:drop के साथ स्थानीय डाटाबेस ड्रॉप करने की कोशिश और उसके बाद मैं rake db:create का उपयोग करके फिर से खाली डेटाबेस बनाने के।

समस्या

मैं हो रही है जब वास्तव में डेटाबेस के लिए डंप आयात करने की कोशिश है

psql -d app_development -U myusername -f mydumpfile.sql 

मैं इस

psql:latest.dump:24: ERROR: syntax error at or near "PGDMP" 
LINE 1: PGDMP 
     ^
psql:latest.dump:28: ERROR: syntax error at or near "" 
LINE 1:  INCREMENT BY 1 
     ^
psql:latest.dump:36: ERROR: syntax error at or near "" 
LINE 1:  id integer NOT NULL, 
     ^
psql:latest.dump:40: ERROR: syntax error at or near "" 
LINE 1:  INCREMENT BY 1 
     ^
psql:latest.dump:45: ERROR: syntax error at or near "" 
LINE 1:  id integer NOT NULL, 
     ^
psql:latest.dump:49: ERROR: syntax error at or near "" 
LINE 1:  INCREMENT BY 1 

... 

psql:latest.dump:1601: invalid command \S4???(?̭?A?|c?e0<00K?A?}FϚ?????A(??~?t?I?????G(? K???l??k"?H?ȁ?ͲS?,N*?[(@??a5J??j} 
psql:latest.dump:1602: invalid command \??k???|??w???h? 
psql:latest.dump:1603: invalid command \=??????o?h? 
psql:latest.dump:1609: invalid command \????^.?????????E???/-???+??>#?ؚE?.2)Ȯ&???? g????"7},_??]?:?f?Tr|o???)?p????h?KO?08[Rqu???|3?cW?ڮ?ahbm??H?H8??$???2?a?-أ 
psql:latest.dump:1613: invalid command \D!qVS???L??*??׬R??I!??? 
psql:latest.dump:1614: invalid command \??-?}Q 
psql:latest.dump:12565: ERROR: invalid byte sequence for encoding "UTF8": 0xb0 

किसी भी विचार यह क्या हो रहा है और कैसे किया जाता है की तरह त्रुटि मिल रही शुरू इसे हल करो?

+1

क्या कोई विशिष्ट कारण है कि आप टैप्स का उपयोग नहीं कर रहे हैं , http://rubydoc.info/gems/taps/0.3.24/frames? यह आपको स्थानीय डेटाबेस को पॉप्युलेट करने के लिए एक सरल 'हेरोकू डीबी: पुल' चलाने की अनुमति देता है। मुझे यकीन नहीं है कि यह आपकी समस्या को खत्म कर देगा, लेकिन यह थोड़ा और सुविधाजनक है :) – theIV

+0

असल में आप सही हैं। स्थापित टैप्स मणि और अब यह पूरी तरह से काम करता है। कुछ कारणों से टैप मणि को अभी भी gem फ़ाइल पर दोनों नल और sqlite3 घोषित करने की आवश्यकता है भले ही मैं postgresql का उपयोग कर रहा हूं। उत्तर के रूप में अपना प्रयास करना चाहते हैं? – Martin

+0

हो गया और किया गया। मणि की आवश्यकताओं के बारे में, हां, यदि आप पीजी का उपयोग कर रहे हैं तो भी उन आवश्यकताओं को घोषित करने की आवश्यकता बहुत परेशान है। :/ – theIV

उत्तर

51

आपको त्रुटियां दिखाई देती हैं क्योंकि psql वास्तव में उन्हें compressed dump (यही वह है जो उसका उपयोग करता है) को SQL क्वेरी की व्याख्या करने का प्रयास करता है।

जब आप डंप नहीं पढ़ सकते हैं, pg_restore -O latest.dump आप वैध एसक्यूएल आप psql को पाइप सकता है देता है, लेकिन आसान उपाय निम्नलिखित में से एक है:

pg_restore -O -d app_development latest.dump 

नोट्स:

  • उपयोग -O क्योंकि आप शायद अपने रिमोट heroku postgres डीबी के यादृच्छिक उपयोगकर्ता नाम का उपयोग नहीं करते हैं।
  • हेरोोक doesn't recommend to use taps लेकिन मुझे नहीं पता कि यह वास्तव में कितना जोखिम भरा है।
+0

दिलचस्प। मैंने नहीं देखा था कि वे * इसका उपयोग करने की सलाह नहीं देते हैं, यह देखते हुए कि उन्होंने इसे कैसे विकसित किया और इसका उपयोग सीएलआई के माध्यम से आंतरिक रूप से किया जाता है। – theIV

+0

उस दस्तावेज़ में आप कहां देखते हैं कि हेरोोक टैप्स की सिफारिश नहीं कर रहा है? –

+0

यह मामला था जब मैंने इस प्रश्न का उत्तर दिया: http://web.archive.org/web/20120310004826/http://devcenter.heroku.com/articles/taps –

3

Taps मणि का उपयोग करें। यह आपको स्थानीय डेटाबेस को पॉप्युलेट करने के लिए एक सरल heroku db:pull चलाने की अनुमति देता है।

32

अपने टर्मिनल
(Heroku Dev Center) में इन 4 आसान चरणों का पालन करें:

  1. अपने डेटाबेस की एक बैकअप प्रतिलिपि बनाएँ: करने के लिए

    $ heroku pg:backups capture DATABASE_NAME 
    
  2. Heroku से प्रतिलिपि डाउनलोड करें (अपने स्थानीय मशीन) कर्ल का उपयोग कर:

    $ curl -o latest.dump 'heroku pg:backups public-url' 
    
  3. लोड यह *:

    $ pg_restore --verbose --clean --no-acl --no-owner -h localhost -U YOUR_USERNAME -d DATABASE_NAME latest.dump 
    
    • YOUR_USERNAME हो और अपने config/database.yml फ़ाइल से वांछित डेटाबेस चुनें।
    • DATABASE_NAME आपका विकास/परीक्षण/उत्पादन डीबी (पूर्व।mydb_development)

यह है कि!

+3

अच्छे कदम, कोशिश की और यह काम करता है! – abhijit

+1

नया इंटरफ़ेस है: 'heroku pgbackups: capture' और फिर ' curl -o latest.dump \ 'heroku pg: बैकअप सार्वजनिक-यूआरएल \ '' – grosser

+0

धन्यवाद @ grosser, मैंने नए इंटरफ़ेस में अपडेट किया। –

0

मैं अपनी स्थानीय मशीन पर पोस्टग्रेस सेट करने से बचना चाहता था (अगर आप त्वरित निर्देशों की तलाश में हैं तो डेटाबेस को दूर करना और पुनर्निर्माण करना एक दर्द है)। मैंने इसे स्थानीय पोस्टग्रेज़ डेटाबेस चलने वाले डॉकर के साथ करने के लिए कुछ सटीक निर्देश दिए। मैं यहां एक लिंक जोड़ रहा हूं, क्योंकि Google ने मुझे इस प्रश्न पर लाया है (और यह संभव समाधान है, हालांकि संभवतः आप जो खोज रहे हैं वह नहीं): https://gist.github.com/locofocos/badd43131f14b3e40c760741d5a26471

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