Din beregning er slået fra på flere punkter.
- Lagringsstørrelse for
varchar
,text
(ogcharacter
!) citerer manualen ):
Fed understregning min for at besvare spørgsmålet i kommentaren.
-
HeapTupleHeader optager 23 bytes . Men hver tuple ("vare" - række eller indeksindgang) har en vare-id i starten af datasiden til den, i alt på de nævnte 27 bytes. Sondringen er relevant, da faktiske brugerdata begynder ved et multiplum af
MAXALIGN
fra starten af hver vare, og vareidentifikationen tæller ikke med i denne forskydning - samt den faktiske "tupelstørrelse". -
1 byte udfyldning på grund af datajustering (multiple af 8), som bruges til NULL bitmap i dette tilfælde.
-
Ingen polstring for typen
varchar
(men den ekstra byte nævnt ovenfor)
Så den faktiske beregning (med alle kolonner fyldt til det maksimale) er:
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
Relateret:
- Bruger ikke brug af NULL i PostgreSQL stadig en NULL bitmap i headeren?
- Beregning og besparelse af plads i PostgreSQL
Du finder mange flere på linklisten til højre for disse svar.