[pgsql-jp: 38965] Page 構造について

tanaka_tk1984 @ yahoo.co.jp tanaka_tk1984 @ yahoo.co.jp
2007年 11月 22日 (木) 00:32:39 JST


こんにちは
田中と申します。


表題の件でご質問させて下さい。


【質問内容】

「正しいPage構造」と「ItemIdDataとItemPointerDataの違い」を
教えてください。


以下に調べた内容を記載します。


【調べた内容】
(A)
まずマニュアルより、ページの構造は以下のようになっていると記載されています。
http://www.postgresql.jp/document/current/html/storage-page-layout.html
===
PageHeaderData
ItemPointerData
空き領域
アイテム
特別な空間
===


(B)
また、ソースを確認すると以下のような構造だと記載されています。
(postgresql-8.2.5/src/include/storage/bufpage.h)

 * +----------------+---------------------------------+
 * | PageHeaderData | linp1 linp2 linp3 ...		
 * +-----------+----+---------------------------------+
 * | ... linpN |					
 * +-----------+--------------------------------------+
 * |		   ^ pd_lower				
 * |							
 * |			 v pd_upper			
 * +-------------+------------------------------------+
 * |			 | tupleN ...		   |
 * +-------------+------------------+-----------------+
 * |	   ... tuple3 tuple2 tuple1 | "special space" |
 * +--------------------------------+-----------------+
 *				^ pd_special


上記構造と(A)の内容より、linp1・・・がItemPointerDataかと
思ってしまいました

実際、ItemPointerData構造体も存在していました。
(postgresql-8.2.5/src/include/storage/itemptr.h)


(C)
しかし、PageHeaderData構造体を確認したところ、ItemIdDataがline pointerと
いうようなコメントが入っていました。

(postgresql-8.2.5/src/include/storage/bufpage.h)

typedef struct PageHeaderData
{
:省略

ItemIdData	pd_linp[1];	/* beginning of line pointer array */
} PageHeaderData;


(D)
以上の結果より、
「ItemPointerData」、「linp1」、「ItemIdData」の関係が
良くわからなくなってしまいました。

※間違っているかもしれませんが、現状はItemIdDataかItemPointerDataの
両者ともページ内のタプルの位置を表すものだと思っています。




以上

よろしくお願いします。


--------------------------------------
New Design Yahoo! JAPAN  2008/01/01
http://pr.mail.yahoo.co.jp/newdesign/



pgsql-jp メーリングリストの案内