2012-01-12 21 views
1

かなり大きなMediaWikiデータベースがあります。特定の日付以降に編集されていないすべてのページを削除したいと思います。特定の日付の前にMediaWikiページを削除する

問題のwikiは、最初にwikiを作成したときにインポートされたWikipediaのカットとそれ以降作成したページの負荷で構成されています。私たちは最近、ウィキペディアのページをもはや必要とせず、それをデータベースから削除したいと考えました。

これを行うには、元のインポート以降に編集されていないすべてのページを削除するのが最も良い方法でした。問題は、どうやってこれを行うのかわかりません。

誰でもアイデアがありますか?

答えて

2

SELECT page_id, page_namespace, page_title 
FROM /*prefix*/page 
WHERE page_touched < '20110101000000' 

これは持っているすべてのページのID、名前空間の番号とタイトルが一覧表示されます2011年初めから編集されていません(タイムスタンプ形式は'YYYYMMDDHHMMSS'です)。MediaWikiのインストール時にテーブル名の接頭辞を設定した場合は、上記の/*prefix*/をそれに置き換える必要があります。この時点で

、いくつかのことは、あなたが行うことができますがあります:ジョシュアC.ラーナーが示すように

  • は、あなたがexportすべてのページは、あなたが(どちらかSpecial:Exportまたはmaintenance/dumpBackup.phpで)し、再保存しておきたいことができ - それらを新しいデータベースにインポートします。

  • maintenance/deleteBatch.phpという名前のmaintenance scriptもあります。これは、管理者が通常の方法で削除したかのようにページの束を削除するために使用できます。

  • 最後に、ページを元に戻したくない場合は、上記のSQLクエリの最初の行をDELETEに置き換えることができます。私は強くこれを行う前に、データベースのバックアップを作成することをお勧めします。これにより、孤立したリビジョンがデータベースに残されますが、想像上のメンテナンススクリプトmaintenance/deleteOrphanedRevisions.phpでそれらを取り除くことができます。

(上記の最初の2つの方法でマイナーな問題は、輸出とバッチが削除することであるSQLクエリは、名前空間番号を返しながら、スクリプトはすべて、名前空間に記載されているページをしたい。それは難しいことではありませんもちろん、削除したいすべてのページがメインネームスペースにある場合、これは問題ではありません:AND page_namespace = 0を追加するだけですクエリからIDと名前空間を出力から削除します)。

2

初期設定(Wikipediaカット)後に作成した記事のリストを生成し、それらの記事をエクスポートし、それらを新たに初期化したMediaWikiデータベースに再インポートする方が簡単かもしれません。あなたはこのようなSQLクエリを実行して、指定した日付をする前(または後)に編集最後のページのリストを取得することができます

関連する問題