जवाबों:
कॉलम में प्रविष्टियों में field_config
और field_config_instance
शायद एक मूल्य होगा ।1
deleted
इसका मतलब है कि वे हटाए जाने के लिए चिह्नित हैं, लेकिन वास्तव में तब तक नहीं हटाया जाएगा जब तक आप क्रोन नहीं हटाते (हटाए गए फ़ील्ड डेटा को शुद्ध नहीं किया जाता field_cron()
)।
शराबी का उपयोग:
$ drush eval "field_purge_batch(500)"
आपको कुछ बार दौड़ना पड़ सकता है, या $ बैच में वृद्धि हो सकती है। फिर भी क्रोन चलाने के बाद भी फ़ील्ड_डलेटेड और फ़ील्ड_डलेटेड_विजन टेबल हो सकती है।
सवाल
SELECT * FROM `field_config` WHERE `deleted` = 1
SELECT * FROM `field_config_instance` WHERE `deleted` = 1
यदि आप खाली आते हैं, तो आप उन बचे हुए तालिकाओं को सुरक्षित रूप से हटा सकते हैं
हटाए गए डेटा को हटाने के लिए क्रोन चलाने के विकल्प के रूप में, आप मैन्युअल रूप से field_purge_batch ($ batch_size) चला सकते हैं ।
फ़ंक्शन को मैन्युअल रूप से चलाने के लिए आप या तो:
उपयोग करने के लिए $ बैच_साइज़ आपके सर्वर वातावरण और जरूरतों के आधार पर अलग-अलग होंगे। मैंने मान 5 से कम और 10000 के रूप में उच्च के रूप में उपयोग किया है।
उन Drupal 8 उपयोगकर्ताओं के लिए,
मैंने यह भी अनुभव किया, कोड खोदो। मैंने यह सब कारण पाया कि आपके किए जाने के बाद फ़ील्ड क्यों नहीं हटाई गई:
खेतों में दूर नहीं जा रहे हैं, यह तर्क के एक टुकड़े के कारण यहाँ, field_purge_batch में
// We cannot purge anything if the entity type is unknown (e.g. the
// providing module was uninstalled).
// @todo Revisit after https://www.drupal.org/node/2080823.
if (!isset($info[$entity_type])) {
continue;
}
मॉड्यूल जो निर्भर है, की स्थापना रद्द की जाती है। यही कारण है कि खेतों को हटाया नहीं जाता है।
इसे कैसे हल करें? यह मॉड्यूल को फिर से स्थापित करने और उन क्षेत्रों को शुद्ध करने और वापस अनइंस्टॉल करने के लिए दृष्टिकोण की सिफारिश की जाती है। यह पता लगाने के लिए कि आपको कौन से मॉड्यूल को पुनर्स्थापित करने की आवश्यकता है:
$fields = entity_load_multiple_by_properties('field_config', array(
'deleted' => TRUE,
'include_deleted' => TRUE,
));
dpm($fields); // this is devel module of var_dump
// check the protected member called "dependencies"
यदि आप मॉड्यूल को फिर से स्थापित करने के लिए उस दृष्टिकोण पर नहीं जाना चाहते हैं, तो आप तुरंत हटा भी सकते हैं, मुझे यकीन नहीं है कि व्यवहार क्या है लेकिन यह काम करना चाहिए।
बैकअप पहले !!!
हाँ, आलसी मत बनो, यह आपके गधे को बचाएगा, अगर कुछ गलत हो जाता है।
$fields = entity_load_multiple_by_properties('field_config', array(
'deleted' => TRUE,
'include_deleted' => TRUE,
));
foreach ($fields as $field) {
$field->delete();
}
// Retrieve all deleted field storages. Any that have no fields can be purged.
$deleted_storages = \Drupal::state()->get('field.storage.deleted') ? : array();
foreach ($deleted_storages as $field_storage) {
$field_storage = new FieldStorageConfig($field_storage);
$fields = entity_load_multiple_by_properties('field_config', array('field_storage_uuid' => $field_storage->uuid(), 'include_deleted' => TRUE));
if (empty($fields)) {
field_purge_field_storage($field_storage);
}
}
आखिरी बार क्रोन करें। मुझे उम्मीद है कि यह इस मुद्दे को ठीक कर देगा :)
किसी भी समाधान को खोजने के लिए प्रतीत नहीं कर सकते। इसलिए मैंने उन्हें उन दो तालिकाओं से मैन्युअल रूप से हटा दिया।
यदि आप कई बार ड्रूपल क्रोन चलाते हैं, तो ड्रुपल फील्ड टेबल और उसकी सामग्री को हटा देगा। आप आसानी से क्रोन को कई बार चलाने के लिए अगले चरणों का पालन कर सकते हैं, लेकिन यह चरण आपके सिस्टम, वेब या होस्टिंग को अवरुद्ध कर सकते हैं, लेकिन यदि आप अपने सिस्टम को नियंत्रित करते हैं तो आप ऐसा कर सकते हैं।
अगला बैश कमांड लिखें:
जबकि सच है; कर्ल करें [कॉपी किए गए लिंक को यहां रखें, ब्रैकेट को हटा दें]; किया हुआ;
एंटर दबाए। असीमित समय तक कमांड निष्पादित किया जाएगा।
जैसा कि मैंने पहले कहा था, सबसे अच्छा समाधान नहीं है, लेकिन यह सरल है, यह काम करता है, आप कुछ भी गलत नहीं करेंगे, क्योंकि आप केवल ड्रूपल क्रोन चला रहे हैं, इसलिए, आप कुछ गलत php कोड के साथ कुछ भी तोड़ सकते हैं। अन्यथा, आप अपने वेब में सर्वर, सिस्टम, होस्टिंग या अन्य किसी चीज़ को संतृप्त कर सकते हैं, क्योंकि यह चरण क्रोन के बहुत बार चलते हैं और इससे वेब संसाधनों की खपत होती है, लेकिन यदि आपके पास संसाधनों का नियंत्रण है, तो बहुत अधिक नहीं हैं तालिकाओं या पंक्तियों को साफ करने के लिए या आप जानते हैं कि यह आपके लिए करना सुरक्षित है, आप इसे कर सकते हैं।
और मुझे पता है, यह सबसे अच्छा समाधान नहीं है। लेकिन यह काम करता है। शायद यह आपकी स्थिति के लिए आसान और सबसे अच्छा समाधान है।