Wie kann ich alle Knoten- / Feldrevisionen löschen?

17

Ich habe eine Drupal 7-Site, auf der Knoten- und Feldrevisionen gespeichert werden. Ich behalte Revisionen für den Fall, dass versehentlich eine neue fehlerhafte Version gespeichert wird und ich zurückkehren möchte.

Aber jetzt möchte ich die Datenbank bereinigen und optimieren, um weniger Speicherplatz auf der Festplatte zu beanspruchen.

Mit welchen Methoden können alle Revisionen außer der aktuellen für alle Knoten / Felder der Site gelöscht werden?

John
quelle

Antworten:

13

Verwenden Sie den Knoten Revision löschen Modul zu löschen und Ihre Revisionen zu verwalten. (Ich bin der Betreuer des Moduls.)

Mit dem Modul zum Löschen von Knotenrevisionen können Sie die Revisionen des Knotens nach Ihren Wünschen verwalten. Es hilft Ihnen, die bestimmte Anzahl von Revisionen für den Knoten beizubehalten. Dieses Modul bietet Ihnen die Flexibilität, das Löschen der Revision für den bestimmten Inhaltstyp anzuwenden und zu einem bestimmten Zeitpunkt auszuführen. Sie können Ihre Einstellungen auf der Verwaltungsseite zum Löschen von Knotenrevisionen verwalten.

Kaushal Kishore
quelle
Können Sie Feldrevisionen mit Node Revision Delete löschen? Ich sehe keine Optionen, um dies mit diesem Modul zu tun
BlondeSwan
15

Es gibt noch keine stabile Version für das Löschen von Revisionen, aber ein D7-Port ist auf dem Weg (nicht sicher, ob er überhaupt funktioniert).

In diesem Thread schlug jemand vor, mit VBO Revisionen zu isolieren und zu löschen.

Wenn Sie mit der API vertraut sind, durchlaufen Sie alle Knoten, rufen die Überarbeitungen mit ab node_revision_list()und löschen sie mit node_revision_delete().

Als letzten Ausweg und wenn Sie mit der Datenbank herumspielen möchten ( wie ich ), können Sie Revisionszeilen field_revision_*und node_revision-tabellen löschen . Versuche dies:

ACHTUNG: überhaupt nicht getestet!

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
);

Die vollständige Liste Ihrer Revisionstabellen finden Sie in der information_schemaDatenbank:

SELECT DISTINCT TABLE_NAME 
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME LIKE 'field_revision%'
AND TABLE_SCHEMA = 'your_database';
tostinni
quelle
3
Das Modul " Node Revision Delete" ist jetzt stabil.
Free Radical
Wenn ich das teste, denke ich, dass die Bedingung für node_revision query sein sollte WHERE node.vid = node_revision.vid. Fehler wie sie sind. Geben Sie die Tabellen möglicherweise auch in der Abfrage field_revision_body an.
Digitgopher
Das in dieser Antwort erwähnte Revisionslöschmodul empfiehlt stattdessen die Verwendung von Node Revision Delete, da wir nicht fünf Module benötigen, die dasselbe tun. Siehe akzeptierte Antwort.
mbomb007
2

In der gleichen Situation habe ich folgenden Code verwendet:

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
quelle
1

Ich habe dies für die VBO-Leute gemacht (führe willkürliches PHP aus), es löscht alle Revisionen (außer den aktuellen). Dies beruht auf der Sortierreihenfolge in gebaut node_revision_list(), so dass Ihre DB & Test für die gewünschten Ergebnisse zu sichern , bevor auf Live - Daten verwenden .

  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
quelle
Es scheint, als hätten Sie große Probleme, das Löschen der aktuellen Revision (Sortieren, Zählen) zu vermeiden. Aber node_revision_delete verhindert bereits das Löschen der aktuellen Revision.
Dxvargas
0

Das Modul " Node Revision Delete" ist jetzt stabil.

Mit dem Modul zum Löschen von Knotenrevisionen können Sie alte Revisionen von Inhaltstypen verfolgen und bereinigen. Eigenschaften:

  • Definieren Sie die maximale Anzahl von Revisionen, die pro Inhaltstyp aufbewahrt werden sollen.
  • Run on Drush, Cron Run oder in einem anderen Zeitraum (täglich, wöchentlich usw.).
Juampy NR
quelle