私はたくさんのを持っています field_deleted_*
データベース内のテーブルとどちらもdrush cr
またはcronを実行すると削除されます。それらをデータベースから削除するだけで大丈夫ですか? Drupalに他の方法で削除するように指示するにはどうすればよいですか?
編集:4k4あたりのトラブルシューティングのヒント:
➜ default git:(HUHLR-172) ✗ drush ev "var_dump(\Drupal::state()->get('field.storage.deleted'))"
array(0) {
}
これの意味は:
これが空の場合、Drupalはこの情報がないとテーブル名のハッシュキーを推測することができないため、データベース内のテーブルも削除できます。
いいえ、これは良い考えではありません。データベーステーブルだけでなく、削除する必要のあるものがたくさんあるからです。最初に使用状況をチェックせずにこれらのテーブルを削除すると(以下のトラブルシューティングを参照)、このエラーが発生します Cronエラーメッセージ。テーブルまたはビューが見つかりません:1146
削除されたフィールドはcronによってパージされますが、実行ごとに50行のみです。プロセスを加速したい場合は、cronをより頻繁に実行するか、field.settings.ymlでバッチサイズを増やします。
_purge_batch_size: 50
_
Cronの代わりに、コマンドラインからfield_purge_batch()
を実行し、より高いバッチ制限(1000など)を使用して、メモリ/時間制限に達することなく削除できる行数を指定できます。
_drush ev "field_purge_batch(1000)"
_
トラブルシューティング
Cronまたはdrushコマンドの効果がなく、一部の行を削除しない場合でも(テーブルに行が残っている場合)、これらのテーブルにフィールドストレージがまだ登録されているかどうかを確認します。
_drush ev "var_dump(\Drupal::state()->get('field.storage.deleted'))"
_
これが空の場合、Drupalはこの情報がないとテーブル名のハッシュキーを推測することができないため、データベース内のテーブルも削除できます。
これが空でない場合、フィールドストレージ定義のこの出力を使用して、これをさらにデバッグできます(@MarioSteinitzのコメントを参照)。