Respostas:
As entradas field_config
e field_config_instance
provavelmente terão um valor de 1
na deleted
coluna.
Isso significa que eles estão marcados para exclusão, mas na verdade não serão excluídos até você executar o cron (os dados do campo excluído são eliminados field_cron()
).
usando drush:
$ drush eval "field_purge_batch(500)"
pode ser necessário executar algumas vezes ou aumentar o $ batch_size; ainda pode haver tabelas field_deleted e field_deleted_revision, mesmo após executar cron
inquerir
SELECT * FROM `field_config` WHERE `deleted` = 1
SELECT * FROM `field_config_instance` WHERE `deleted` = 1
se você ficar vazio, poderá excluir com segurança essas tabelas restantes
Como alternativa à execução do cron para remover os dados excluídos, você pode executar manualmente field_purge_batch ($ batch_size) .
Para executar manualmente a função, você pode:
O $ batch_size a ser usado variará dependendo do ambiente e das necessidades do servidor. Eu usei valores tão baixos quanto 5 e tão altos quanto 10000.
Para os usuários do Drupal 8,
Eu experimentei isso também, desenterrar o código. Encontrei esse motivo por que os campos não foram excluídos depois de você, o seguinte:
Os campos persistem e não desaparecem, isso devido a uma parte da lógica aqui, em 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;
}
Os módulos dependentes são desinstalados. essa é a razão pela qual os campos não são removidos.
Como resolver isso? Recomenda-se uma abordagem para reinstalar o módulo primeiro, limpar esses campos e desinstalar novamente. Para descobrir qual módulo você precisa reinstalar:
$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"
Caso você não queira seguir essa abordagem de reinstalar o módulo, você também pode excluir imediatamente, não tenho certeza qual é o comportamento, mas ele deve fazer o trabalho.
Backup primeiro !!!
Sim, não seja preguiçoso, ele vai salvar sua bunda, se algo der errado.
$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);
}
}
Faça o cron pela última vez. Espero que isso resolva o problema :)
Não consigo encontrar nenhuma solução. Então, acabei excluindo-os dessas duas tabelas manualmente.