Manual:page テーブル

This page is a translated version of the page Manual:Page table and the translation is 69% complete.
Other languages:
Deutsch • ‎English • ‎Yorùbá • ‎dansk • ‎español • ‎français • ‎polski • ‎українська • ‎中文 • ‎日本語 • ‎한국어
Manual:コンテンツ MediaWiki のデータベース レイアウト page table


MediaWiki バージョン:
1.5

page テーブルは「ウィキの中核」とみなすことができます。 このテーブルには、ある一つのMediaWiki内にある各ページに対応したエントリーがあります。エントリーはタイトルによって識別され、そのほかにもいくつかの不可欠なメタデータも含まれています。 それは MediaWiki 1.5 のリビジョン r6710 で初めて導入されました。

ページの内容そのものは text テーブルに保存されます。 記事の内容を取り出す際、MediaWikiはpageテーブルの page_title をまず検索します。 そして revision テーブルの rev_id から page_latest と一致する値を検索し、rev_text_id を得ます。 得られた rev_text_id を text テーブルの old_id から検索し、ページ内容を取り出します。 ページが削除されると、各リビジョンは archive テーブルに移動されます。

データベースからあるページを手動で完全に削除するのであれば、pageテーブル内にある削除対象ページのエントリーを削除し、かつ revisionテーブルにあるそのページの版もすべて削除してください。また、textテーブルからそのページに関する行だけをすべて削除してください。 この操作を行うには、まず削除対象ページに関する行を削除し、それから maintenance/deleteOrphanedRevisions.php を実行します。 方法は下記も参照してください。

フィールド

page_id

一意に識別される主キーです。 この値はページの編集や移動を行っても保持されます。

ページIDはページを移動しても変わりませんが、ページを削除しその後復元したときは変わるかもしれません。 MediaWiki 1.27以降、削除前のページIDはarchiveテーブルに保持され、復元されたページは以前のページIDを再利用しようとします。

MediaWikiはさまざまな関連ツールを提供しています:

  • (特別ページを除く)あらゆるページのページIDは、ツールメニューの"ページ情報"で確認できます。
  • {{PAGEID}} の呪文を記すとそのページのページIDに変換されます。
  • Special:Redirectの特別ページからページIDを使ってページにアクセスすることができます。 例えば、Special:Redirect/page/24280 にアクセスすると現在のページにリダイレクトされます。
  • index.php で curid パラメータにページIDを指定しそのページにアクセスすることができます。 例えば、/w/index.php?curid=24280 にアクセスすれば現在のページが表示されます。

この他にもページIDを返す、またはページIDを入力として用いるさまざまなAPIがあります。 例えば、page_id = 10501 であるこのページに関するページ https://www.mediawiki.org/w/api.php?action=query&prop=info&titles=Manual:Page%20tablehttps://www.mediawiki.org/w/api.php?action=query&prop=info&pageids=10501 を見てみてください。 このフィールドはWikiPage::getId()Title::getArticleID()などを使ってアクセスできます。

page_namespace

ページ名は名前空間とタイトルに分けられます。 名前空間のキーはユーザインタフェース言語ごとに独立した定数で、includes/Defines.phpにより定義されています。

このフィールドにはページの名前空間の番号が書かれています。 値の範囲は、中心となる名前空間の場合0から99、カスタム名前空間の場合100から10,000です。

page_title

不正な文字を取り除いたページタイトルで名前空間は含みません。最大255文字(バイナリ)です。 文字列として保存され、空白はアンダースコアに置換されます。 記事中に表示される実際のタイトルは、このタイトルに含まれるアンダースコア(_)を空白( )に置き換えただけです。 例えば、"Talk:Foo Bar"という名前のページは、このフィールドでは"Foo_Bar"という値で保持されます。

page_restrictions

MediaWiki バージョン:
1.9

誰がページの移動や編集をできるのかを示す許可値のリストをコンマ区切りで記したもの。 edit部分とmove部分はコロンで区切ります(例:"edit=autoconfirmed,sysop:move=sysop")

MediaWiki 1.10から、ページ保護の制御情報はpage restrictionsテーブルに移されました。そのため、それより新しいMediaWikiのバージョンが生成するデータベースはこのフィールドが空になっています。 しかし、このフィールドは旧バージョンのMediaWikiによってつくられた行のため、現行版MediaWikiでもまだ使っています!

page_counter

MediaWiki バージョン:
1.24

ページが閲覧された回数。 この機能は提案にしたがい、MediaWiki 1.25で完全に削除されました。 その前から、ウィキメディアのプロジェクト群を含む多くのサイトでパフォーマンス向上のためこの機能は無効化されていました。詳細は Manual:$wgDisableCounters を参照してください。

page_is_redirect

ここに1の値を設定するとその記事はリダイレクトページであることを意味します。その他の場合は0を設定します。

page_is_new

このフィールドには、そのページが新しいかどうかが記録されます。新しいとは、版が1つしかないか、または複数の版があっても復元されてからまだ編集されていないことを意味します。 このフィールドに1の値が設定されていたら、そのページは新しいことを意味します。そうでなければこの値は0になります。 そのページが新しかった場合、巻き戻し リンクは表示されません。 なぜなら巻き戻す先がないからです。

page_random

0と1の間にあるランダムな十進数値。特別:おまかせ表示に使われます(詳しくは Manual:おまかせ表示 を参照してください)。 wfRandom() によって生成されます。

2005年頃、バグによりこのランダム値が不均一になりました。このフィールドはページ作成時に設定されるため、長期間運営されてきたウィキではまだこの誤った値が一部残っているかもしれません。詳しくはT208909を参照してください。

page_touched

This timestamp is updated whenever the page changes in a way requiring it to be re-rendered, invalidating caches. Aside from editing, this includes permission changes, creation or deletion of linked pages, and alteration of contained templates. Set to $dbw->timestamp() at the time of page creation.

page_links_updated

MediaWiki バージョン:
1.23

This timestamp is updated whenever a page is re-parsed and it has all the link tracking tables updated for it. This is useful for de-duplicating expensive backlink update jobs. Set to the default value of NULL when the page is created by WikiPage::insertOn().

page_latest

This is a foreign key to rev_id for the current revision. It may be 0 during page creation. It needs to link to a revision with a valid revision.rev_page, or there will be the "The revision #0 of the page named 'Foo' does not exist" error when one tries to view the page. Can be obtained via WikiPage::getLatest().

page_len

Uncompressed length in bytes of the page's current source text.

This however, does not apply to images which still have records in this table. Instead, the uncompressed length in bytes of the description for the file is used as the latter is in the text.old_text field.

The Wikipage class in includes/WikiPage.php has two methods, viz., insertOn() and updateRevisionOn() that are responsible for populating these details.

page_content_model

MediaWiki バージョン:
1.21

Content model, see CONTENT_MODEL_XXX constants. Comparable to revision.rev_content_model.

page_lang

MediaWiki バージョン:
1.24

ページ本文の言語です。 Set to the default value of NULL at the time of page creation.

スキーマの要約

MediaWiki バージョン:
1.35

Gerrit change 581141

DESCRIBE page;

+--------------------+---------------------+------+-----+----------------+----------------+
| Field              | Type                | Null | Key | Default        | Extra          |
+--------------------+---------------------+------+-----+----------------+----------------+
| page_id            | int(10) unsigned    | NO   | PRI | NULL           | auto_increment |
| page_namespace     | int(11)             | NO   | MUL | NULL           |                |
| page_title         | varbinary(255)      | NO   |     | NULL           |                |
| page_restrictions  | tinyblob            | YES  |     | NULL           |                |
| page_is_redirect   | tinyint(3) unsigned | NO   | MUL | 0              |                |
| page_is_new        | tinyint(3) unsigned | NO   |     | 0              |                |
| page_random        | double unsigned     | NO   | MUL | NULL           |                |
| page_touched       | binary(14)          | NO   |     |                |                |
| page_links_updated | varbinary(14)       | YES  |     | NULL           |                |
| page_latest        | int(10) unsigned    | NO   |     | NULL           |                |
| page_len           | int(10) unsigned    | NO   | MUL | NULL           |                |
| page_content_model | varbinary(32)       | YES  |     | NULL           |                |
| page_lang          | varbinary(35)       | YES  |     | NULL           |                |
+--------------------+---------------------+------+-----+----------------+----------------+
MediaWiki バージョン:
1.25 – 1.34

Gerrit change 167655

DESCRIBE page;

+--------------------+---------------------+------+-----+----------------+----------------+
| Field              | Type                | Null | Key | Default        | Extra          |
+--------------------+---------------------+------+-----+----------------+----------------+
| page_id            | int(10) unsigned    | NO   | PRI | NULL           | auto_increment |
| page_namespace     | int(11)             | NO   | MUL | NULL           |                |
| page_title         | varbinary(255)      | NO   |     | NULL           |                |
| page_restrictions  | tinyblob            | NO   |     | NULL           |                |
| page_is_redirect   | tinyint(3) unsigned | NO   | MUL | 0              |                |
| page_is_new        | tinyint(3) unsigned | NO   |     | 0              |                |
| page_random        | double unsigned     | NO   | MUL | NULL           |                |
| page_touched       | binary(14)          | NO   |     |                |                |
| page_links_updated | varbinary(14)       | YES  |     | NULL           |                |
| page_latest        | int(10) unsigned    | NO   |     | NULL           |                |
| page_len           | int(10) unsigned    | NO   | MUL | NULL           |                |
| page_content_model | varbinary(32)       | YES  |     | NULL           |                |
| page_lang          | varbinary(35)       | YES  |     | NULL           |                |
+--------------------+---------------------+------+-----+----------------+----------------+
MediaWiki バージョン:
1.24

Gerrit change 135312

DESCRIBE page;

+--------------------+---------------------+------+-----+---------+----------------+
| Field              | Type                | Null | Key | Default | Extra          |
+--------------------+---------------------+------+-----+---------+----------------+
| page_id            | int(10) unsigned    | NO   | PRI | NULL    | AUTO_INCREMENT |
| page_namespace     | int(11)             | NO   | MUL | NULL    |                |
| page_title         | varchar(255) binary | NO   |     | NULL    |                |
| page_restrictions  | tinyblob            | NO   |     | NULL    |                |
| page_counter       | bigint(20) unsigned | NO   |     | 0       |                |
| page_is_redirect   | tinyint(3) unsigned | NO   | MUL | 0       |                |
| page_is_new        | tinyint(3) unsigned | NO   |     | 0       |                |
| page_random        | real unsigned       | NO   | MUL | NULL    |                |
| page_touched       | binary(14)          | NO   |     | NULL    |                |
| page_links_updated | varbinary(14)       | YES  |     | NULL    |                |
| page_latest        | int(10) unsigned    | NO   |     | NULL    |                |
| page_len           | int(10) unsigned    | NO   | MUL | NULL    |                |
| page_content_model | varbinary(32)       | YES  |     | NULL    |                |
| page_lang          | varbinary(35)       | YES  |     | NULL    |                |
+--------------------+---------------------+------+-----+---------+----------------+
MediaWiki バージョン:
1.23

Gerrit change 101170

DESCRIBE page;

+--------------------+---------------------+------+-----+---------+----------------+
| Field              | Type                | Null | Key | Default | Extra          |
+--------------------+---------------------+------+-----+---------+----------------+
| page_id            | int(10) unsigned    | NO   | PRI | NULL    | AUTO_INCREMENT |
| page_namespace     | int(11)             | NO   | MUL | NULL    |                |
| page_title         | varchar(255) binary | NO   |     | NULL    |                |
| page_restrictions  | tinyblob            | NO   |     | NULL    |                |
| page_counter       | bigint(20) unsigned | NO   |     | 0       |                |
| page_is_redirect   | tinyint(3) unsigned | NO   | MUL | 0       |                |
| page_is_new        | tinyint(3) unsigned | NO   |     | 0       |                |
| page_random        | real unsigned       | NO   | MUL | NULL    |                |
| page_touched       | binary(14)          | NO   |     | NULL    |                |
| page_links_updated | varbinary(14)       | YES  |     | NULL    |                |
| page_latest        | int(10) unsigned    | NO   |     | NULL    |                |
| page_len           | int(10) unsigned    | NO   | MUL | NULL    |                |
| page_content_model | varbinary(32)       | YES  |     | NULL    |                |
+--------------------+---------------------+------+-----+---------+----------------+
MediaWiki バージョン:
1.21 – 1.22

DESCRIBE page;

+--------------------+---------------------+------+-----+---------+----------------+
| Field              | Type                | Null | Key | Default | Extra          |
+--------------------+---------------------+------+-----+---------+----------------+
| page_id            | int(10) unsigned    | NO   | PRI | NULL    | AUTO_INCREMENT |
| page_namespace     | int(11)             | NO   | MUL | NULL    |                |
| page_title         | varchar(255) binary | NO   |     | NULL    |                |
| page_restrictions  | tinyblob            | NO   |     | NULL    |                |
| page_counter       | bigint(20) unsigned | NO   |     | 0       |                |
| page_is_redirect   | tinyint(3) unsigned | NO   | MUL | 0       |                |
| page_is_new        | tinyint(3) unsigned | NO   |     | 0       |                |
| page_random        | real unsigned       | NO   | MUL | NULL    |                |
| page_touched       | binary(14)          | NO   |     | NULL    |                |
| page_latest        | int(10) unsigned    | NO   |     | NULL    |                |
| page_len           | int(10) unsigned    | NO   | MUL | NULL    |                |
| page_content_model | varbinary(32)       | YES  |     | NULL    |                |
+--------------------+---------------------+------+-----+---------+----------------+
MediaWiki バージョン:
1.19 – 1.20

DESCRIBE page;

+-------------------+---------------------+------+-----+---------+----------------+
| Field             | Type                | Null | Key | Default | Extra          |
+-------------------+---------------------+------+-----+---------+----------------+
| page_id           | int(10) unsigned    | NO   | PRI | NULL    | AUTO_INCREMENT |
| page_namespace    | int(11)             | NO   | MUL | NULL    |                |
| page_title        | varchar(255) binary | NO   |     | NULL    |                |
| page_restrictions | tinyblob            | NO   |     | NULL    |                |
| page_counter      | bigint(20) unsigned | NO   |     | 0       |                |
| page_is_redirect  | tinyint(3) unsigned | NO   | MUL | 0       |                |
| page_is_new       | tinyint(3) unsigned | NO   |     | 0       |                |
| page_random       | real unsigned       | NO   | MUL | NULL    |                |
| page_touched      | binary(14)          | NO   |     | NULL    |                |
| page_latest       | int(10) unsigned    | NO   |     | NULL    |                |
| page_len          | int(10) unsigned    | NO   | MUL | NULL    |                |
+-------------------+---------------------+------+-----+---------+----------------+
MediaWiki バージョン:
1.10 – 1.18

DESCRIBE page;

+-------------------+---------------------+------+-----+---------+----------------+
| Field             | Type                | Null | Key | Default | Extra          |
+-------------------+---------------------+------+-----+---------+----------------+
| page_id           | int(10) unsigned    | NO   | PRI | NULL    | AUTO_INCREMENT |
| page_namespace    | int(11)             | NO   | MUL | NULL    |                |
| page_title        | varchar(255) binary | NO   |     | NULL    |                |
| page_restrictions | tinyblob            | NO   |     | NULL    |                |
| page_counter      | bigint(20) unsigned | NO   |     | 0       |                |
| page_is_redirect  | tinyint(3) unsigned | NO   |     | 0       |                |
| page_is_new       | tinyint(3) unsigned | NO   |     | 0       |                |
| page_random       | real unsigned       | NO   | MUL | NULL    |                |
| page_touched      | binary(14)          | NO   |     | NULL    |                |
| page_latest       | int(10) unsigned    | NO   |     | NULL    |                |
| page_len          | int(10) unsigned    | NO   | MUL | NULL    |                |
+-------------------+---------------------+------+-----+---------+----------------+
MediaWiki バージョン:
1.5 – 1.9

DESCRIBE page;

+-------------------+---------------------+------+-----+---------+----------------+
| Field             | Type                | Null | Key | Default | Extra          |
+-------------------+---------------------+------+-----+---------+----------------+
| page_id           | int(8) unsigned     | NO   | PRI | NULL    | AUTO_INCREMENT |
| page_namespace    | int(11)             | NO   | MUL | NULL    |                |
| page_title        | varchar(255) binary | NO   |     | NULL    |                |
| page_restrictions | tinyblob            | NO   |     | NULL    |                |
| page_counter      | bigint(20) unsigned | NO   |     | 0       |                |
| page_is_redirect  | tinyint(1) unsigned | NO   |     | 0       |                |
| page_is_new       | tinyint(1) unsigned | NO   |     | 0       |                |
| page_random       | real unsigned       | NO   | MUL | NULL    |                |
| page_touched      | char(14) binary     | NO   |     | NULL    |                |
| page_latest       | int(8) unsigned     | NO   |     | NULL    |                |
| page_len          | int(8) unsigned     | NO   | MUL | NULL    |                |
+-------------------+---------------------+------+-----+---------+----------------+

インデックス

MediaWiki バージョン:
1.28

SHOW INDEX IN page;

+-------+------------+-----------------------------+--------------+------------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name                    | Seq_in_index | Column_name      | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+-------+------------+-----------------------------+--------------+------------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| page  |          0 | PRIMARY                     |            1 | page_id          | A         |           0 |     NULL | NULL   |      | BTREE      |         |               |
| page  |          0 | name_title                  |            1 | page_namespace   | A         |           0 |     NULL | NULL   |      | BTREE      |         |               |
| page  |          0 | name_title                  |            2 | page_title       | A         |           0 |     NULL | NULL   |      | BTREE      |         |               |
| page  |          1 | page_random                 |            1 | page_random      | A         |           0 |     NULL | NULL   |      | BTREE      |         |               |
| page  |          1 | page_len                    |            1 | page_len         | A         |           0 |     NULL | NULL   |      | BTREE      |         |               |
| page  |          1 | page_redirect_namespace_len |            1 | page_is_redirect | A         |           0 |     NULL | NULL   |      | BTREE      |         |               |
| page  |          1 | page_redirect_namespace_len |            2 | page_namespace   | A         |           0 |     NULL | NULL   |      | BTREE      |         |               |
| page  |          1 | page_redirect_namespace_len |            3 | page_len         | A         |           0 |     NULL | NULL   |      | BTREE      |         |               |
+-------+------------+-----------------------------+--------------+------------------+-----------+-------------+----------+--------+------+------------+---------+---------------+

MySQL のサンプル コード

一覧ページとその他の必須テーブルとの関係

以下のコードにより、中心となるテーブル(page, revision, text)から全記事の最新版を選択できます。

SELECT
    p.page_id AS "page_id",
    CAST(p.page_title AS CHAR(10000) CHARACTER SET utf8) AS "page_title",
    r.rev_text_id AS "revision_id",
    t.old_id AS "text_id"
FROM
    page p
        INNER JOIN revision r
            ON p.page_latest = r.rev_id
        INNER JOIN text t
            ON r.rev_text_id = t.old_id

Other important considerations:

  • to find undeleted pages add r.rev_deleted = 0
  • to find pages in namespace 0 add p.page_namespace = 0
  • to find pages that are not redirects add p.page_is_redirect = 0

These additional statements can be added either as conditions to a Where statement or as conditions on the appropriate Inner Join statement.

Deleting pages with their relationships in text and revision tables

The following shows the steps to run to help you delete pages and their children from the main pages in the page, revision and text tables.

Listing all related table keys

-- 
-- Listing page titles and related relationships to other tables (revision, text, page)
--
SELECT
    `p`.`page_id` AS "page_id",
    CAST(`p`.`page_title` AS CHAR(10000) CHARACTER SET utf8) AS "page_title",
    `r`.`rev_text_id` AS "revision_id",
    `t`.`old_id` AS "text_id"
FROM
    page p
        INNER JOIN `revision` r
            ON `p`.`page_id` = `r`.`rev_page`    -- Confirmed to be reference to page.page_id
        INNER JOIN `text` t
            ON `r`.`rev_text_id` = `t`.`old_id`  -- Confirmed to be reference to revision table
WHERE 
     `p`.`page_title` LIKE '%Tests/parent-a%';    -- Match with title of a parent page

Deleting from database the rows

-- 
-- Making a comma separated list of each table ids to delete, Will be used in a delete transaction
--
SELECT
    CONCAT('IN(', GROUP_CONCAT(`p`.`page_id`), ')') AS 'page',
    CONCAT('IN(', GROUP_CONCAT(`r`.`rev_text_id`), ')')  AS 'revision',
    CONCAT('IN(', GROUP_CONCAT(`t`.`old_id`), ')')  AS 'text'
FROM
    page p
        INNER JOIN `revision` r
            ON `p`.`page_id` = `r`.`rev_page`        -- Confirmed to be reference to page.page_id
        INNER JOIN text t
            ON `r`.`rev_text_id` = `t`.`old_id`      -- Confirmed to be reference to revision table
WHERE 
     p.page_title LIKE '%Tests/parent-a%';    -- Match with title of a parent page

以下のような結果が得られるでしょう。

+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------+
| page                                             | revision                                         | text                                             |
+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------+
| IN(5530,5528,5529,5530,5529,5528,5532,5532,5532) | IN(9918,9921,9917,9919,9920,9916,9922,9915,9923) | IN(9918,9921,9917,9919,9920,9916,9922,9915,9923) |
+--------------------------------------------------+--------------------------------------------------+--------------------------------------------------+
1 row in set (0.07 sec)

以下ののクエリで結合したidを置き換えてください。

-- 
-- DELETING pages in one transaction
-- NOTE: adjust the content IN(...) with your own :)
--
SET autocommit=0;
START TRANSACTION;
  DELETE FROM `page` WHERE page_id IN(5530,5528,5529,5530,5529,5528,5532,5532,5532);
  DELETE FROM `revision` WHERE rev_text_id IN(9918,9921,9917,9919,9920,9916,9922,9915,9923);
  DELETE FROM `text` WHERE old_id IN(9918,9921,9917,9919,9920,9916,9922,9915,9923);
COMMIT;

この後、この管理スクリプトを使って掃除のようなことができます。

php maintenance/deleteOrphanedRevisions.php

関連項目