web-dev-qa-db-ja.com

すべてのノード/フィールドリビジョンを削除するにはどうすればよいですか?

drupal 7つのサイトで、ノードとフィールドのリビジョンを保持しています。誤って新しい障害のあるバージョンが保存され、元に戻したい場合のために、リビジョンを保持しています。

しかし、今はデータベースをクリーンアップして最適化し、ハードディスクのスペースを節約したいと考えています。

サイトのすべてのノード/フィールドについて、現在のリビジョンを除くすべてのリビジョンを削除するいくつかの方法は何ですか?

17
john

Node Revision Delete モジュールを使用して、リビジョンを削除および管理します。 (私はモジュールのメンテナーです。)

Nodeリビジョン削除モジュールを使用すると、選択したNodeのリビジョンを管理できます。ノードのリビジョンの特定の数を維持するのに役立ちます。このモジュールは、特定のコンテンツタイプのリビジョン削除を適用し、特定の時間に実行する柔軟性を提供します。設定は、Nodeリビジョン削除管理ページから管理できます。

13
Kaushal Kishore

リビジョンの削除 の安定版リリースはまだありませんが、 D7ポート は進んでいます(機能するかどうかは不明です) 。

このスレッドでは、誰かが [〜#〜] vbo [〜#〜] を使用してリビジョンを分離して削除することを提案しました。

APIに慣れている場合は、すべてのノードをループし、 node_revision_list() を使用してリビジョンを取得し、 を使用してそれらを削除しますnode_revision_delete()

最後の手段として、DBをいじるのが好きな場合( のように )、field_revision_*およびnode_revisionテーブルのリビジョンの行を削除できます。これを試して:

警告:まったくテストされていません!

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

リビジョンのテーブルの完全なリストは、information_schemaデータベースにあります。

SELECT DISTINCT TABLE_NAME 
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME LIKE 'field_revision%'
AND TABLE_SCHEMA = 'your_database';
15
tostinni

同じ状況で、以下のコードを使用しました。

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);
}
2
mrded

私はこれをVBOの人々(任意のPHPを実行)のために作成しました。すべてのリビジョン(現在のものを除く)を削除します。これは、組み込みのソート順 node_revision_list()に依存しているため、DBをバックアップし、ライブデータで使用する前に目的の結果をテストします

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

ノードリビジョンの削除 モジュールに安定版リリースが追加されました。

Node Revision Deleteモジュールを使用すると、コンテンツタイプの古いリビジョンを追跡およびプルーニングできます。機能:

  • コンテンツタイプごとに保持するリビジョンの最大量を定義します。
  • Drush、cron実行、または別の期間(毎日、毎週など)で実行します。
0
Juampy NR