計算はいくつかの点でずれています。
-
varchar
のストレージサイズ 、text
(およびcharacter
!)は、マニュアルの引用 です。 ):
コメントで質問に対処するために大胆に強調します。
-
HeapTupleHeaderは23バイトを占有します 。ただし、各タプル( "item"-行またはインデックスエントリ)にはアイテム識別子があります データページの先頭で、合計で上記の27バイトになります。実際のユーザーデータは
MAXALIGN
の倍数で始まるため、この区別は重要です。 各アイテムの先頭から、アイテムIDはこのオフセット、および実際の「タプルサイズ」にはカウントされません。 -
データアライメントによる1バイトのパディング(8の倍数)。この場合、NULLビットマップに使用されます。
-
タイプ
varchar
のパディングなし (ただし、上記の追加バイト)
したがって、実際の計算(すべての列が最大に入力されている場合)は次のようになります。
23 -- heaptupleheader
+ 1 -- NULL bitmap (or padding if row has NO null values)
+ 9 -- columns ...
+ 101
+ 2
+ 101
+ 4
+ 11
-------------
252 bytes
+ 4 -- item identifier at page start
関連:
リンクリストにはさらに多くの情報があります これらの回答の右側にあります。