2011-03-11 12 views
19

का उपयोग कर इंजन मैं एक मुद्दा है कि दक्षिण जब मैं विस्थापित InnoDB के रूप में एक नए मॉडल के लिए डीबी तालिका बनाता है, लेकिन जब एक और डेवलपर अपने स्वयं के माइग्रेशन चलाते MyISAM के रूप में तालिका बनाता है में चल रहा हूँ।स्पष्ट रूप से सेट MySQL तालिका भंडारण दक्षिण और Django

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

मैं कैसे स्पष्ट करें कि तालिका में MyISAM का उपयोग कर बनाई गई है बना सकते हैं?

क्या तालिका कारण हो सकता है अलग अलग वातावरण में एक अलग भंडारण इंजन का उपयोग कर बनाया जाना?

उत्तर

22

यह सुनिश्चित करें कि सभी माइग्रेशन हमेशा InnoDB का उपयोग किया जाता है के लिए, आपको InnoDB के रूप में भंडारण इंजन डेटाबेस परिभाषा सीधे इस तरह स्थापित करना चाहिए,:

DATABASES = { 
    'default': { 
     ... 
     'OPTIONS' : { 'init_command' : 'SET storage_engine=INNODB', }, 
    } 

आप MySQL 5.7.x और ऊपर प्रयोग कर रहे हैं ,

DATABASES = { 
    'default': { 
     ... 
     'OPTIONS' : { 'init_command' : 'SET default_storage_engine=INNODB', }, 
    } 

लेकिन आपको पता होना चाहिए कि इसमें performance hit हो सकता है। इसलिए आप माइग्रेशन चलाते समय ही यह विकल्प सेट करना चाहेंगे।

+0

स्पष्ट करने के लिए, इस settings.py में चला जाता है, माइग्रेशन में नहीं। –

+2

यह वही था जो मैं ढूंढ रहा था। धन्यवाद। आपके द्वारा वर्णित प्रदर्शन हिट की क्षतिपूर्ति करने के लिए मैंने इसके आसपास एक सशर्त जोड़ा। अब यह केवल तभी लगाया जाएगा जब मैं डेटाबेस को संशोधित करना चाहता हूं (सिंकडीबी या संशोधित)। 'आयात sys' 'sys.argv में' माइग्रेट 'या sys.argv में' syncdb ':' –

+2

MyISAM के लिए उचित संग्रहण_इनलाइन सेटिंग क्या है? क्या यह सब ऊपरी मामला है या क्या यह मिश्रित मामला है, या कुछ और? –

14

आप दक्षिण का उपयोग करते हैं, तो आप STORAGE_ENGINE सेट कर सकते हैं।

Django < 1,2

# add to your settings file 
DATABASE_STORAGE_ENGINE = 'INNODB' # django < 1.2 

Django> = 1,2

# add to your settings file 
DATABASES = { 
    'default': { 
     ... 
     'STORAGE_ENGINE': 'INNODB' 
    } 
} 
+0

यह बेहतर उत्तर है (हालांकि एक टाइपो है - "नहीं" होना चाहिए "=", सही वाक्यविन्यास के लिए लिंक देखें), क्योंकि इसमें पहले उल्लेख की गई प्रदर्शन समस्याएं नहीं होंगी। स्टोरेज इंजन केवल तभी सेट किया जाएगा जब दक्षिण माइग्रेशन कर रहा हो (उदाहरण के लिए एक टेबल बनाना), लेकिन अन्य डेटाबेस संचालन के लिए नहीं, एआईयूआई। –

+0

डैनियल तय यह :) बड़े Django संस्करणों के साथ विरासत परियोजनाओं पर काम कर उन लोगों के लिए – dnozay

+0

नोट, लेकिन नए MySQL- अभिनव की इस टिप्पणी का ध्यान है कि storage_engine MySQL 5.7.x और ऊपर से हटा दिया गया है ले लो। Django सेटिंग्स फ़ाइल में 'DEFAULT_STORAGE_ENGINE'' का उपयोग करें, न कि' STORAGE_ENGINE''। – MisterRios

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