> > Dmitry Koterov <dmi...@koterov.ru> writes: > > No, I meant that in case of the row (1, NULL, NULL, 2, 3, NULL): > > - the corresponding NULL bitmap is (100110...) > > - the corresponding tuple is (1, 2, 3) > > - t_natts=3 (if I am not wrong here) > > You are wrong --- t_natts would be six here. In general the length of > the null bitmap in a tuple (if it has one at all) is always exactly > equal to its t_natts value. >
And so, the real number of values in the tuple - (1, 2, 3) above - is equal to the number of 1-bits in NULL bitmap. And the size of NULL bitmap is held in t_natts. I meant that when I said "thanks to NULL bitmap, adding a new nullable column is cheap". :-) And, of course, thanks to t_natts (HeapTupleHeaderGetNatts macro) - too.