답변:
의 항목 field_config
및 field_config_instance
아마의 값을 지니게 되리라 1
에 deleted
열을.
즉, 삭제 표시가되어 있지만 cron을 실행할 때까지 실제로 삭제되지 않습니다 (삭제 된 필드 데이터가에서 제거됨 field_cron()
).
돌진 사용하기 :
$ drush eval "field_purge_batch(500)"
cron을 실행 한 후에도 몇 번 실행하거나 $ batch_size를 늘려야 field_deleted 및 field_deleted_revision 테이블이 여전히있을 수 있습니다.
질문
SELECT * FROM `field_config` WHERE `deleted` = 1
SELECT * FROM `field_config_instance` WHERE `deleted` = 1
비어 있으면 남은 테이블을 안전하게 삭제할 수 있습니다.
cron을 실행하여 삭제 된 데이터를 제거하는 대신 field_purge_batch ($ batch_size)를 수동으로 실행할 수 있습니다 .
기능을 수동으로 실행하려면 다음 중 하나를 수행하십시오.
사용할 $ 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);
}
}
마지막으로 크론을하십시오. 문제가 해결되기를 바랍니다. :)
해결책을 찾지 못하는 것 같습니다. 그래서 두 테이블에서 수동으로 삭제했습니다.
drupal cron을 여러 번 실행하면 drupal이 필드 테이블과 해당 내용을 삭제합니다. 다음 단계에 따라 cron을 여러 번 쉽게 실행할 수 있지만이 단계는 시스템, 웹 또는 호스팅을 차단할 수 있지만 시스템을 제어하는 경우 수행 할 수 있습니다.
다음 bash 명령을 작성하십시오.
사실이지만; 컬을하십시오 [괄호를 삭제하고 복사 된 링크를 여기에 넣으십시오]; 끝난;
엔터 키를 치시오. 명령은 무제한으로 실행됩니다.
내가 전에 언급했듯이, 최고의 해결책은 아니지만 간단합니다. 작동하지만 drupal cron 만 실행하기 때문에 잘못된 것을하지 않을 것이므로 잘못된 PHP 코드로 무엇이든 깨뜨릴 수 있습니다. 그렇지 않으면 웹에서 서버, 시스템, 호스팅 또는 기타 항목을 포화시킬 수 있습니다.이 단계는 cron을 여러 번 실행하고 웹 리소스 소비를 발생 시키지만 리소스를 제어 할 수있는 경우는 많지 않습니다. 정리할 테이블이나 행 또는 시스템에 안전하게 수행 할 수 있다는 것을 알고 있으면 할 수 있습니다.
그리고 나는 그것이 최선의 해결책이 아니라는 것을 안다. 그러나 작동합니다. 어쩌면 그것은 당신의 상황에 가장 쉽고 가장 좋은 해결책 일 것입니다.