[WordPress] postmetaテーブルの_edit_lastと_edit_lock

公開

スポンサーリンク

WordPressのデータベースがどういう構造をしているか調べていて、postmetaテーブルのmeta_keyカラムにある“_edit_last”と“_edit_lock”がどう機能しているか分からなかったので調べた。

データは以下の形式で保存されている。

meta_id | post_id | meta_key  | meta_value
0       |       1 | _edit_last | 1
1       |       1 | _edit_lock| 1317131082

meta_idはpostmetaテーブルのprimaryキーで自動的に割り振られるもの。post_idはどのポストのデータかを指す。_edit_lastのmeta_valueはユーザーIDで、_edit_lockはUNIXタイムスタンプのようだ。字義通りなら最終更新と編集不可に関するデータなのだろうが、なぜこの2つのデータが、全てのポストに用意されているか一見分かからない。

というのは、投稿ユーザーと最終編集日時に関するデータならpostsテーブルに用意されているからだ。投稿者のユーザーIDはpostsテーブルのpost_authorに、最終更新日のデータはpost_modifiedとpost_modified_gmtに書きこまれている。

ではpostmetaテーブルの_edit_lastと_edit_lockは何のためのデータなのか、というとどうやら複数のユーザーが同時に同じエントリを編集するのを防ぐためのものらしい。

WordPressフォーラムで分かりやすく説明されていた。

When you edit a post, old or new, WordPress creates 2 records in post meta table for warn other editors that someone is in edit.

So, these records can remain on server for a very long time. When a Blog has many posts, for example 100, in post meta table you can found 200 “dead” records.

Delete these records is not dangerous.

ようするに、投稿したエントリの編集を始めると、他のユーザーが同じエントリの編集を始めたときそれに対して警告するため、metatableに_edit_lastと_edit_lockというデータが用意される。そしてこのデータは長い間残ってしまう。自動的に削除されるかどうかは不明。私のWordPressに残っている一番古いデータは2009年7月のものだった。だから、少なくとも2年が経過しても削除されずに蓄積されていくようだ。つまり、投稿した記事が100あれば不必要なデータが200個存在する。

ということで、postmetaテーブルのmeta_valueが_edit_lastと_edit_lockになっているレコードは削除しても問題ない。あったからといってWordPressの動作が遅くなることはないが、少しでもデータを軽くしたいなら消去するのが良いだろう。

スポンサーリンク


Comment