pg_restore.exe का उपयोग करने से पहले बाधाओं को अक्षम करें


16

जब मैं pg_restore.exeकिसी डेटाबेस से डंप फ़ाइल को निष्पादित करने की कोशिश करता हूं , तो यह दर्जनों त्रुटियों को फेंक देता है, सभी समान:

ERROR: insert or update on table "someTable" violates foreign key constraint "aConstraintName"

यह स्पष्ट रूप से इस तथ्य के कारण है कि मैंने डेटा बेस को डंप फ़ाइल से पुनर्स्थापित करने से पहले खाली कर दिया है (यह फ़ाइल एक उत्पादन डेटाबेस से आती है) ... तो निश्चित रूप से कोई भी विदेशी कुंजी बाधा ठीक नहीं हो सकती है यदि एक संदर्भित तालिका खाली है ...

क्या मुझे कॉल करने से पहले सभी तालिकाओं के लिए बाधाओं और सभी विदेशी कुंजियों को अक्षम करने का एक तरीका है pg_restore.exe, और बाद में बाधाओं और विदेशी कुंजियों को फिर से सक्षम करना है।

एसओ में मुझे कुछ दिलचस्प लगा: समय को कम करने के लिए बाधा की जाँच करना । लेकिन मुझे नहीं लगता कि मैं बाधाओं को pg_restore.exeदूर करने के psql.exeबाद अंदर से कॉल कर सकता हूं ।

10 साल पहले वापस डेटिंग, फिर बाधाओं को फिर से जोड़ने का सुझाव देते हुए यह पोस्ट भी है । या pg_class reltriggers के मान को 0 में बदलने के लिए और यह भी बाधाओं के लिए संभव होगा ... लेकिन मुझे डर है कि यह अच्छे अभ्यास से अधिक हैकिंग है ...

आप क्या सलाह देते हैं, इस मामले में सबसे अच्छा अभ्यास क्या है? क्या झंडे के pg_dump.exe साथ-clean प्रयोग करने से डंप बनता है जो डेटाबेस को पुनर्स्थापित करते समय बाधाओं की जाँच करता है?


क्रॉस-पोस्ट यहाँ, अगर किसी को यह बाद में पता चलता है: stackoverflow.com/questions/12093654/…
क्रेग रिंगर

जवाबों:


28

क्या आपने --disable-triggersविकल्प की कोशिश की है pg_restore?

प्रलेखन के अनुसार: यदि आप डेटा रीलोड के दौरान नहीं करना चाहते हैं तो तालिकाओं पर संदर्भात्मक अखंडता की जाँच या अन्य ट्रिगर्स होने पर इसका उपयोग करें।

कृपया ध्यान दें कि यह केवल एक --data-onlyपुनर्स्थापना के लिए मान्य है और इसके साथ ही --superuser=usernameविकल्प को पारित करने की आवश्यकता है ।


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