जैसा कि DatabaseSchema_pgsql :: changeField में और db_change_field () में बताया गया है :
महत्वपूर्ण नोट: डेटाबेस पोर्टेबिलिटी बनाए रखने के लिए, आपको स्पष्ट रूप से सभी सूचकांकों और प्राथमिक कुंजियों को फिर से बनाना होगा जो परिवर्तित फ़ील्ड का उपयोग कर रहे हैं।
इसका मतलब यह है कि आपको db_drop_ {Primary_key, unique_key, index} () से db_change_field () कॉल करने से पहले सभी प्रभावित कुंजी और इंडेक्स को छोड़ना होगा। कुंजियों और सूचकांकों को फिर से बनाने के लिए, कुंजी परिभाषाओं को वैकल्पिक $ new_keys तर्क के रूप में सीधे db_change_field () में पास करें।
उदाहरण के लिए, मान लीजिए कि आपके पास:
$schema['foo'] = array(
'fields' => array(
'bar' => array('type' => 'int', 'not null' => TRUE)
),
'primary key' => array('bar')
);
और आप foo.bar को सीरियल की तरह बदलना चाहते हैं, इसे प्राथमिक कुंजी के रूप में छोड़ दें। सही क्रम है:
db_drop_primary_key($ret, 'foo');
db_change_field($ret, 'foo', 'bar', 'bar',
array('type' => 'serial', 'not null' => TRUE),
array('primary key' => array('bar'))
);
इसी तरह का कोड Drupal 7 के लिए बताया गया है।
ध्यान रखें कि, मेरे अनुभव के लिए, आप एक प्राथमिक कुंजी नहीं निकाल सकते हैं जो एक सीरियल फ़ील्ड का उपयोग करती है। Drupal 6 पर, मुझे हर बार एक त्रुटि मिली जो मैंने करने की कोशिश की; मैंने ड्रुपल 7 पर कोशिश नहीं की।
इसके अलावा, मुझे कोई अन्य समस्या नहीं है जो आप डेटाबेस अनुक्रमित के साथ कर सकते हैं।
एक डेटाबेस टेबल में एक इंडेक्स जोड़ने के बारे में जो दूसरे मॉड्यूल से बनाया गया है, मैं ऐसा करने का सुझाव नहीं दूंगा, क्योंकि:
- एक मॉड्यूल उस फ़ील्ड के लिए एक इंडेक्स को नहीं गिराता है जिसे बदला जा रहा है, यदि मॉड्यूल खुद उस इंडेक्स को नहीं बनाता है। मॉड्यूल के लिए ऐसा करना संभव नहीं होगा क्योंकि यह सूचकांक का नाम नहीं जानता है।
- किसी अन्य मॉड्यूल द्वारा बनाई गई डेटाबेस तालिका को संशोधित करना एक अच्छा विचार नहीं है, यहां तक कि मामले में मॉड्यूल एक कोर मॉड्यूल है। यदि एक और मॉड्यूल है जो एक ही टेबल को बदलता है, तो मॉड्यूल एक दूसरे के साथ होने वाले किसी भी संघर्ष को कैसे संभाल सकते हैं, या उन परिवर्तनों के साथ जो कोर मॉड्यूल अपने डेटाबेस पर लागू होगा?
यदि डेटाबेस तालिका किसी अन्य मॉड्यूल (एक कोर मॉड्यूल या एक तृतीय-पक्ष मॉड्यूल) से बनाई जा रही है, तो मैं नए सूचकांक का उपयोग करने के लिए उपयोग के मामले प्रदान करते हुए, मॉड्यूल के लिए एक सुविधा अनुरोध खोलने का सुझाव दूंगा; यदि कोई प्रदर्शन समस्या है, तो एक इंडेक्स जोड़ना वांछित कार्य हो सकता है।
यदि आप किसी अन्य मॉड्यूल से अपनी खुद की साइट पर बनाए गए टेबल में एक इंडेक्स जोड़ने जा रहे हैं, तो किसी भी बदलाव के लिए तैयार रहें जिसे आपको मॉड्यूल के अपडेट होने पर और अपने साइट में स्थापित करने से पहले हर बार करना होगा। ।
यह वह है जो यह तय कर सकता है कि अतिरिक्त काम आपके द्वारा प्राप्त किए जाने वाले प्रदर्शन के लायक है या नहीं। व्यक्तिगत रूप से, मुझे नहीं लगता कि यह मूल्य है, हालांकि।