Таблица field_deleted_revision
Таблица field_deleted_revision является служебной таблицей в Drupal, которая играет важную роль в процессе очистки данных. Когда ревизия сущности (например, ноды, термина таксономии или пользователя) удаляется, связанные с ней данные полей не удаляются сразу из основных таблиц полей (field_revision_*). Вместо этого они перемещаются в эту таблицу для временного хранения перед окончательным удалением в процессе cron.
Поля
| Поле | Тип данных | Описание |
|---|---|---|
field_name |
varchar(32) |
Машинное имя поля, к которому относятся удаленные данные. Ссылается на поле field_config.field_name.
|
deleted |
int |
Флаг, указывающий, что данные помечены как удаленные. Всегда равен 0 в основных таблицах полей. При перемещении в field_deleted_revision устанавливается в 1.
|
entity_type |
varchar(32) |
Тип сущности, к которой принадлежали данные (например, node, taxonomy_term, user).
|
entity_id |
int |
Уникальный идентификатор (ID) сущности, к которой принадлежали данные. |
revision_id |
int |
Идентификатор конкретной ревизии сущности, которая была удалена. |
language |
varchar(32) |
Язык, для которого были определены данные поля (например, und для неопределенного языка, en, ru).
|
delta |
int |
Порядковый индекс (дельта) значения в многозначном поле. Для однозначных полей всегда равен 0.
|
field_*_value |
Зависит от типа поля |
Столбцы, специфичные для каждого типа поля, которые хранят фактические данные (например, field_body_value для текста, field_image_fid для ссылки на файл). Их набор и тип данных определяются при создании поля.
|
Как это работает
Архитектура полей Drupal хранит данные для каждой ревизии сущности в отдельных таблицах (field_revision_FIELD_NAME). Когда ревизия удаляется (например, при очистке ревизий или удалении всей сущности), прямая операция DELETE в этих таблицах может быть ресурсоемкой и блокирующей.
Вместо этого система помечает данные как подлежащие удалению, устанавливая флаг deleted в 1. Затем, в фоновом режиме, при выполнении cron, Drupal переносит все строки с deleted = 1 из таблиц field_revision_* в соответствующую общую таблицу field_deleted_data или field_deleted_revision. Это позволяет выполнять массовое удаление более эффективно и менее затратно для производительности сайта.
После перемещения в field_deleted_revision данные считаются готовыми к окончательному удалению. Окончательное удаление записей из field_deleted_revision также происходит во время выполнения задач cron.
Пример SQL-запроса
Посмотреть все удаленные ревизии для определенного поля можно с помощью запроса:
SELECT *
FROM field_deleted_revision
WHERE field_name = 'body'
AND entity_type = 'node'
ORDER BY entity_id, revision_id;
Смотрите также
-
таблицу
field_revision_body,
которая хранит ревизии данных текстовых полей -
таблицу
node_revision,
которая содержит ревизии материалов (нод) -
таблицу
field_config,
которая хранит конфигурацию полей -
таблицу
field_deleted_data,
которая хранит удаленные данные для текущих ревизий