Il tuo calcolo è sbagliato in diversi punti.
- Dimensioni di archiviazione di
varchar
,text
(echaracter
!) è, citando il manuale ):
Enfasi in grassetto la mia per affrontare la domanda nel commento.
-
HeapTupleHeader occupa 23 byte . Ma ogni tupla ("elemento" - riga o voce di indice) ha un identificatore di elemento all'inizio della pagina dati ad esso, per un totale di 27 byte citati. La distinzione è rilevante in quanto i dati utente effettivi iniziano a un multiplo di
MAXALIGN
dall'inizio di ogni articolo e l'identificatore dell'articolo non viene conteggiato in questo offset, così come la "dimensione tupla" effettiva. -
1 byte di riempimento dovuto all'allineamento dei dati (multiplo di 8), utilizzato in questo caso per la bitmap NULL.
-
Nessun riempimento per il tipo
varchar
(ma il byte aggiuntivo menzionato sopra)
Quindi, il calcolo effettivo (con tutte le colonne riempite al massimo) è:
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
Correlati:
- Non si utilizza NULL in PostgreSQL utilizza ancora una bitmap NULL nell'intestazione?
- Calcolo e risparmio di spazio in PostgreSQL
Ne troverai molti altri nell'elenco di link a destra di queste risposte.