Стажировка на реальных проектах:
наполнение портфолио, помощь с работой и заказами, пробные собеседования. Жми для подробностей→
139 of 182 menu
Внимание! Репетиторство по Python! Осталось последнее место! Стоимость: 20$ за занятие 1.5 часа. Жми для подробностей!

Таблица 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,
    которая хранит удаленные данные для текущих ревизий