[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 メーリングリストの案内