डेटाबेस से स्वच्छ हटाए गए फ़ील्ड


10

मैंने उनके द्वारा हटाए गए फ़ील्ड बनाए हैं। खेतों के लिए तालिकाओं को नष्ट कर दिया गया है, लेकिन वे अभी भी अंदर हैं field_configऔरfield_config_instance

वहाँ वैसे भी उन्हें साफ करने के लिए है?

धन्यवाद

जवाबों:


10

कॉलम में प्रविष्टियों में field_configऔर field_config_instanceशायद एक मूल्य होगा ।1deleted

इसका मतलब है कि वे हटाए जाने के लिए चिह्नित हैं, लेकिन वास्तव में तब तक नहीं हटाया जाएगा जब तक आप क्रोन नहीं हटाते (हटाए गए फ़ील्ड डेटा को शुद्ध नहीं किया जाता field_cron())।


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

12

शराबी का उपयोग:

$ drush eval "field_purge_batch(500)"

आपको कुछ बार दौड़ना पड़ सकता है, या $ बैच में वृद्धि हो सकती है। फिर भी क्रोन चलाने के बाद भी फ़ील्ड_डलेटेड और फ़ील्ड_डलेटेड_विजन टेबल हो सकती है।

सवाल

SELECT * FROM `field_config` WHERE `deleted` = 1
SELECT * FROM `field_config_instance` WHERE `deleted` = 1

यदि आप खाली आते हैं, तो आप उन बचे हुए तालिकाओं को सुरक्षित रूप से हटा सकते हैं


यह एक शानदार उत्तर है, धन्यवाद @ decibel.places!
joelpittet

6

हटाए गए डेटा को हटाने के लिए क्रोन चलाने के विकल्प के रूप में, आप मैन्युअल रूप से field_purge_batch ($ batch_size) चला सकते हैं ।

फ़ंक्शन को मैन्युअल रूप से चलाने के लिए आप या तो:

  • एक php फ़ाइल में बूटस्ट्रैप Drupal
  • एक मेनू हुक पृष्ठ कॉलबैक बनाएँ
  • यदि आपके पास devel मॉड्यूल स्थापित विज़िट / devel / php है

उपयोग करने के लिए $ बैच_साइज़ आपके सर्वर वातावरण और जरूरतों के आधार पर अलग-अलग होंगे। मैंने मान 5 से कम और 10000 के रूप में उच्च के रूप में उपयोग किया है।


4

उन Drupal 8 उपयोगकर्ताओं के लिए,

मैंने यह भी अनुभव किया, कोड खोदो। मैंने यह सब कारण पाया कि आपके किए जाने के बाद फ़ील्ड क्यों नहीं हटाई गई:

  • क्रोन गज़िलियन बार निष्पादित करना
  • ड्रश इवैल "field_purge_batch (500)" मिलियन बार चलाएं

खेतों में दूर नहीं जा रहे हैं, यह तर्क के एक टुकड़े के कारण यहाँ, 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);
  }
}

आखिरी बार क्रोन करें। मुझे उम्मीद है कि यह इस मुद्दे को ठीक कर देगा :)


Drupal उत्तर में आपका स्वागत है! कृपया एकाधिक प्रश्नों के लिए एक ही उत्तर को कॉपी-पेस्ट न करें। यदि वे डुप्लिकेट हैं, तो उन्हें डुप्लिकेट के रूप में चिह्नित करें।
kiamlaluno

-1

किसी भी समाधान को खोजने के लिए प्रतीत नहीं कर सकते। इसलिए मैंने उन्हें उन दो तालिकाओं से मैन्युअल रूप से हटा दिया।


यह सिर्फ मेरे साथ भी हुआ: उत्पादन में क्षेत्र बनाए, इसे परीक्षण प्रणाली में कॉपी किया। उत्पादन के क्षेत्र में वापस लाया, परीक्षण प्रणाली के लिए फिर से नकल की। क्रोन संभवत: इस बीच चला गया है, इस प्रकार चूंकि परीक्षण डेटाबेस को ठीक से गिराया नहीं गया था / फिर से बनाया गया था, डेटा और संशोधन के लिए दो बचे हुए टेबल के आसपास ... फाइंडिंग: * एक परीक्षण डेटाबेस के लिए आयात करते समय हमेशा क्रोन BEFORE एक बैकअप लेने * चलाएं। , हमेशा ड्रॉप करें और बनाएं
क्रिस्टन

drupal.org/node/1351506 यह अभी भी एक ज्ञात मुद्दा है।
केविन मोर्स

-1

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

  1. Drupal स्थिति पृष्ठ पर जाएं (व्यवस्थापक / रिपोर्ट / स्थिति)।
  2. पृष्ठ में नीचे, आप "रन क्रोन मैन्युअल" और "लिंक बाहर से क्रॉन" जैसे लिंक और क्रोन_की पैरामीटर के साथ एक लिंक देख सकते हैं। इस लिंक को कॉपी करें।
  3. एक टर्मिनल (लिनक्स या मैक टर्मिनल) पर जाएं।
  4. अगला बैश कमांड लिखें:

    जबकि सच है; कर्ल करें [कॉपी किए गए लिंक को यहां रखें, ब्रैकेट को हटा दें]; किया हुआ;

  5. एंटर दबाए। असीमित समय तक कमांड निष्पादित किया जाएगा।

  6. आप अपने डेटाबेस पर जा सकते हैं, जैसे phpmyadmin, और नामित तालिकाओं के "हटाएं" की तलाश करें। आप देख सकते हैं कि पंक्तियाँ कैसे हट रही हैं और नीचे जा रही हैं। जब नाम में "हटाएं" वाली सभी तालिकाएं खाली होती हैं, तो इसे हटा दिया जाएगा। जब आप डेटाबेस में कोई हटाए गए टेबल नहीं देख सकते हैं तो आप अंतिम 7 चरण पर जा सकते हैं।
  7. टर्मिनल में बैश कमांड को रोक दिया। आप ctrl + c कीज दबा सकते हैं। यदि आप नहीं कर सकते हैं, तो टर्मिनल बंद करें।

जैसा कि मैंने पहले कहा था, सबसे अच्छा समाधान नहीं है, लेकिन यह सरल है, यह काम करता है, आप कुछ भी गलत नहीं करेंगे, क्योंकि आप केवल ड्रूपल क्रोन चला रहे हैं, इसलिए, आप कुछ गलत php कोड के साथ कुछ भी तोड़ सकते हैं। अन्यथा, आप अपने वेब में सर्वर, सिस्टम, होस्टिंग या अन्य किसी चीज़ को संतृप्त कर सकते हैं, क्योंकि यह चरण क्रोन के बहुत बार चलते हैं और इससे वेब संसाधनों की खपत होती है, लेकिन यदि आपके पास संसाधनों का नियंत्रण है, तो बहुत अधिक नहीं हैं तालिकाओं या पंक्तियों को साफ करने के लिए या आप जानते हैं कि यह आपके लिए करना सुरक्षित है, आप इसे कर सकते हैं।

और मुझे पता है, यह सबसे अच्छा समाधान नहीं है। लेकिन यह काम करता है। शायद यह आपकी स्थिति के लिए आसान और सबसे अच्छा समाधान है।

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