¿Cómo puedo eliminar todas las revisiones de nodo / campo?

17

Tengo un sitio drupal 7, donde guarda revisiones de nodos y campos. Mantengo las revisiones para el caso en el que, por error, se guarda una nueva versión defectuosa y deseo volver.

Pero, ahora quiero limpiar y optimizar la base de datos para ocupar menos espacio en el disco duro.

¿Cuáles son algunos métodos para eliminar todas las revisiones, excepto la actual, para todos los nodos / campos del sitio?

John
fuente

Respuestas:

13

Use el módulo Eliminar revisión de nodo para eliminar y administrar sus revisiones. (Soy el mantenedor del módulo).

El módulo Eliminar revisión de nodo le permite administrar las revisiones del nodo según su elección. Le ayuda a mantener el número específico de revisiones para el nodo. Este módulo le brinda la flexibilidad para aplicar la eliminación de revisión para el tipo de contenido específico y ejecutarlo en el momento específico. Puede administrar su configuración desde la página de administración de eliminación de revisión de nodo.

Kaushal Kishore
fuente
¿Se pueden eliminar las revisiones de campo con Nodo Revision Delete? No veo ninguna opción para hacerlo con este módulo
BlondeSwan
15

Todavía no hay una versión estable para la eliminación de Revisión, pero un puerto D7 está en camino (no estoy seguro de si es funcional).

En este hilo, alguien sugirió usar VBO para aislar las revisiones y eliminarlas.

Si se siente cómodo con la API, realice un bucle a través de todos sus nodos, recupere las revisiones usando node_revision_list()y elimínelas usando node_revision_delete().

Como último recurso y si le gusta jugar con la base de datos ( como yo ), puede eliminar las filas field_revision_*y las node_revisiontablas de las revisiones . Prueba esto:

ADVERTENCIA: no probado en absoluto!

DELETE FROM field_revision_body
WHERE NOT EXISTS (
  SELECT NULL
  FROM node
  WHERE vid = revision_id
);

DELETE FROM node_revision
WHERE NOT EXISTS (
  SELECT NULL
  FROM node
  WHERE node.vid = node_revision.vid
);

Puede encontrar la lista completa de las tablas de sus revisiones en la information_schemabase de datos:

SELECT DISTINCT TABLE_NAME 
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME LIKE 'field_revision%'
AND TABLE_SCHEMA = 'your_database';
tostinni
fuente
3
El módulo Eliminar revisión de nodo ahora tiene una versión estable.
Radical libre
Al probar esto, creo que la condición en la consulta node_revision debería ser WHERE node.vid = node_revision.vid. Errores como es. ¿Quizás también especifique las tablas en la consulta field_revision_body?
digitgopher
El módulo de eliminación de revisión mencionado en esta respuesta recomienda utilizar en su lugar la eliminación de revisión de nodo, ya que no necesitamos 5 módulos que hagan lo mismo. Ver respuesta aceptada.
mbomb007
2

En la misma situación, usé el siguiente código:

foreach (node_load_multiple($nids) as $node) {
  // Delete sub revisions.
  foreach (node_revision_list($node) as $vid => $revision) {
    node_revision_delete($vid);
  }
  // Delete archived revisions.
  revisioning_delete_archived_revisions($node);
}
mrded
fuente
1

Hice esto para la gente de VBO (ejecute PHP arbitrario), eliminará todas las revisiones (excepto la actual). Esto se basa en el orden de clasificación incorporado node_revision_list(), así que haga una copia de seguridad de su base de datos y prueba para obtener los resultados deseados antes de usar datos en vivo .

  krumo($entity);

  $revision_array = node_revision_list($entity);  
  $revision_array_ASC = array_reverse($revision_array, TRUE);
  krumo($revision_array_ASC);
  krumo(count($revision_array_ASC));

  foreach ($revision_array_ASC as $vid => $node) {
    $count = count($revision_array_ASC);
    if ($count > 1) {
          node_revision_delete($vid);
    }
  }

  $revision_array = node_revision_list($entity);  
  krumo($revision_array);
Merrick
fuente
Parece que está teniendo un gran problema para evitar eliminar la revisión actual (ordenar, contar). Pero node_revision_delete ya impide eliminar la revisión actual.
dxvargas
0

El módulo Eliminar revisión de nodo ahora tiene una versión estable.

El módulo Eliminar revisión de nodo le permite rastrear y podar revisiones antiguas de tipos de contenido. caracteristicas:

  • Defina la cantidad máxima de revisiones para mantener por tipo de contenido.
  • Ejecutar en Drush, cron ejecutar o en un período diferente (diario, semanal, etc.).
Juampy NR
fuente