うーん、ええ...そのスクリプトをのぞき見した後、失敗しても驚かない。メモリ内に巨大なリストを構築するのではなく、ページを反復処理するように修正する必要があります。そうでない唯一の理由は、ウィキペディアのようなウィキでは、リビジョンを削除するというのは、実際には通常行うことではないからだと思います。
とにかく、スクリプトを修正する以外に、考えられる回避策がたくさんあります。
deleteOldRevisions.php スクリプトは、ページ ID のリストを受け取ることができます。ウィキの各ページを一度に 1 つずつ実行してみてください。簡単なシェル スクリプトを作成してループで実行することもできます。ページ ID 1 から開始し、Wiki の現在の最大ページ ID までカウントアップします。
または、各ページの最新版のみを含むウィキのダンプを作成し、ウィキのすべてのページ (つまりpage
、revision
とtext
テーブルのすべて) を削除して、ダンプからインポートし直すこともできます。
原則として、自分が何をしているかわかっている場合は、SQL を使用して古いリビジョンを直接削除することもできます。
データベースをいじる前に必ず最初にしたいことは、ウィキを読み取り専用モードに設定し、完全なバックアップを作成することです。これまでにこれを行ったことがない場合は、実際のウィキに取り返しのつかないことを行う前に、ローカルのテスト ウィキにバックアップを復元する練習をすることをお勧めします。
次に、各ページの最新版以外をすべて削除するには、次の SQL コマンドを実行します。
DELETE FROM revision WHERE NOT EXISTS
( SELECT * FROM page WHERE page_id = rev_page AND page_latest = rev_id )
上記のコマンドは古いリビジョンのメタデータのみを削除し、それらのリビジョンの実際のテキストは削除しないことに注意してください。古いテキスト レコードを削除する最も簡単な方法は、purgeOldText.phpメンテナンス スクリプトを実行することですが、次のような SQL を使用しても実行できるはずです。
DELETE FROM text WHERE NOT EXISTS
( SELECT * FROM revision WHERE rev_text_id = old_id )
最後に、すべてがうまくいった場合は、rebuildall.phpメンテナンス スクリプトを実行して、削除されたリビジョンを指す最近の変更などを修正することをお勧めします。次に、すべてが正常に表示されていることを確認し、読み取り専用モードを再度オフにします。
最後に、スペースを節約するためにこれを行っている場合は、古いリビジョンを完全に削除するのではなく、圧縮することを検討してください。これにより、ウィキで利用可能なすべてのリビジョンを維持しながら、かなりの量のスペースを節約できます。