2016-12-31 13 views
8

मैं एक शेड्यूल सेट अप करना चाहता हूं जैसे कि मेरा स्टेजिंग डेटाबेस हमेशा मेरे उत्पादन डेटाबेस की एक प्रति है, और प्रति दिन एक बार या एक घंटे में प्रतिलिपि होती है।हेरोकू पर उत्पादन के लिए उत्पादन से डेटाबेस की निरंतर प्रतिलिपि कैसे निर्धारित करें?

मैं जानता हूँ कि एक बंद प्रतिलिपि प्रदर्शन करने के लिए एक आसान तरीका है कि वहाँ, heroku pg का उपयोग कर:

heroku pg:copy SOURCE_APP::SOURCE_DATABASE DESTINATION_DATABASE --app DESTINATION_DATABASE 

लेकिन वह सिर्फ एक बार की बात है।

मुझे यह भी पता है कि अनुसूचित आदेशों को हेरोकू शेड्यूलर के साथ चलाने में आसान है, जो एक-ऑफ डिनोस में चल रहे हैं। लेकिन dynos उनके पास Heroku Toolbelt स्थापित नहीं है, इसलिए heroku pg:copy उपलब्ध नहीं है।

मैं pg_dump | pg_restore उपयोग करने की कोशिश की है, लेकिन मैं दो मुद्दों में से एक में चलाने: स्कीमा सीमित बिना

, यह विफल रहता है, क्योंकि मैं सही अनुमतियाँ मुझे लगता है कि नहीं है:

pg_restore: [archiver (db)] Error while PROCESSING TOC: 
pg_restore: [archiver (db)] Error from TOC entry 3205; 0 0 COMMENT EXTENSION plpgsql 
pg_restore: [archiver (db)] could not execute query: ERROR: must be owner of extension plpgsql 
    Command was: COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; 

pg_dump को केवल --schema=public पर सीमित करने के साथ, यह विफल रहता है क्योंकि कुछ एक्सटेंशन सार्वजनिक स्कीमा पर निर्भर करते हैं, और उन्हें हटाया नहीं जा रहा है।

pg_restore: [archiver (db)] Error while PROCESSING TOC: 
pg_restore: [archiver (db)] Error from TOC entry 9; 2615 16385 SCHEMA public Storm 
pg_restore: [archiver (db)] could not execute query: ERROR: cannot drop schema public because other objects depend on it 
DETAIL: extension citext depends on schema public 
extension pg_stat_statements depends on schema public 
HINT: Use DROP ... CASCADE to drop the dependent objects too. 
    Command was: DROP SCHEMA IF EXISTS public; 

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

उत्तर

2

कोई कारण नहीं है कि आप उत्पादन डेटाबेस की प्रत्येक प्रति के अग्रदूत के रूप में dyno पर CLI को डाउनलोड और इंस्टॉल नहीं कर सकते हैं।

शेड्यूलर से कॉल करने के लिए आपको केवल एक शेल स्क्रिप्ट चाहिए, और खोल स्क्रिप्ट को सीएलआई स्थापित करने दें और आवश्यक क्रेडेंशियल रखने के लिए उपयुक्त पर्यावरण चर का उपयोग करें।

सरल दो चरण की प्रक्रिया ...

  1. स्थापित CLI
  2. उपयोग CLI डेटाबेस

की प्रतिलिपि प्रदर्शन करने के लिए वास्तव में यह किसी भी वेब या कार्यकर्ता प्रक्रियाओं के बिना स्टैंडअलोन ऐप्स किया जा सकता है यह यह चलाता है।

हम अपने स्वयं के बैकअप चलाने के लिए एक समान विधि का उपयोग करते हैं और उन्हें हेडोकू के अपने बैकअप से स्वतंत्र रूप से एडब्ल्यूएस एस 3 बाल्टी में अपलोड करने के लिए उपयोग करते हैं, इसलिए हम हीरोोक और एडब्ल्यूएस सीएलआई दोनों स्थापित करते हैं।

4

क्या आपने डेटाबेस अनुयायी (उर्फ मास्टर/गुलाम कॉन्फ़िगरेशन) बनाने पर विचार किया है? https://devcenter.heroku.com/articles/heroku-postgres-follower-databases

यह आपके अनुयायी डेटाबेस को लगातार उत्पादन से डेटा के साथ अपडेट करेगा। ध्यान दें कि यदि आपने सीधे अनुयायी डेटाबेस पर डेटा बदल दिया है, तो यह आवश्यक रूप से ओवरराइट नहीं किया जाएगा, इसलिए यह सुनिश्चित न करें कि यह आपके लिए आवश्यक समाधान के लिए एक संभावित समाधान है या नहीं।

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