PAGE FILES 01/23/93 日本語PostgreSQL 日本語PostgreSQL

名称

page structure - Postgres のデータベースファイルのデフォルトページ形式

説明

この節ではPostgres のクラスに使われるページ形式の概要を提供します。ユーザ定義のアクセスメソッドはこのページ形式を使う必要はありません。

次の説明で、 バイト は 8 ビットを含むとしています。加えて、 項目 は Postgres のクラスに保存されているデータを参照しています。

各ページの最初の 8 バイトはページヘッダ.RB ( PageHeaderData )です。ヘッダの中では、最初の 3つの 2バイト整数フィールドlower 、upper 、specialはまだ確保されていない空間の始まりと、まだ確保されていない空間の終り、"特別空間" へのバイトオフセットを表しています。特別空間はページの初期化時に確保されたページの最後の領域で、アクセスメソッドに特有の情報を含みます。ページヘッダの最後の 2バイトのopaqueはページサイズと内部的なページの分裂情報をエンコードしています。ページサイズは各ページに保存されています。なぜなら、バッファプールのフレームはクラスの中でフレーム毎に同じサイズのページに分割されることがあるからです。内部的な分裂情報はいつページの再構築をするかを決める手助けとして使われます。

ページヘッダに続くのは項目の識別子.RB ( ItemIdData )です。新しい項目識別子は確保されていない空間の最初の 4バイトから確保されます。項目識別子は解放されるまで動きませんので、そのインデックスがページの項目の場所を示すのに使われます。実際には、Postgres が作る項目へのポインタ.RB ( ItemPointer )には、フレーム番号と項目識別子のインデックスが含まれています。項目識別子には項目の始まり、そのバイト単位の長さ、その解釈に作用する属性のビットの集合へのバイトオフセットを含みます。

項目そのものは確保されていない空間の最後から確保されていく空間に保存されます。通常、項目は解釈されません。しかし、項目が単一ページに置くには大きすぎるときや、その項目の分裂が望まれる時には、項目は分割され、各断片は次のような方法で別々の項目として扱われます。最初から最後の断片までが、項目の継続構造体 ( ItemContinuationData ) に置かれます。この構造体には次の断片とその断片そのものを指すitemPointerDataを含んでいます。最後の断片は通常通りに扱われます。

ファイル

.../data/...共有 (グローバル) データベースファイルの場所。

.../data/base/... ローカルデータベースファイルの場所。

バグ

大きなオブジェクトへの効率的なアクセスを提供するために、ページ形式は将来的には変更するかもしれません。

この節では新しいアクセスメソッドを書く上での手助けとなるような詳細は不十分です。