Abhishek Bansal
Abhishek Bansal

Reputation: 55

How much space does a null value and an empty value take in postgreSQL?

I read on internet that null values take up to 1bit of space but I am unclear about empty values. Please help me in this. Thank-you in advance

Upvotes: 3

Views: 2635

Answers (1)

Laurenz Albe
Laurenz Albe

Reputation: 247495

The documentation gives information about that:

All table rows are structured in the same way. There is a fixed-size header (occupying 23 bytes on most machines), followed by an optional null bitmap, an optional object ID field, and the user data. [...] The null bitmap is only present if the HEAP_HASNULL bit is set in t_infomask. [...] In this list of bits, a 1 bit indicates not-null, a 0 bit is a null. When the bitmap is not present, all columns are assumed not-null.

A NULL value does not take up any extra space on disk – it means that the respective bit in the null bitmap is set to 0. Only of the table row contains no NULL values at all, PostgreSQL will not save a null bitmap and you can actually save a little space.

An empty string will occupy one byte: a short varlena header that indicates that the length is 0. Beware of padding bytes because of alignment: if, for example, a timestamp immediately follows the empty string, you could get up to 7 bytes of empty padding space, so that the timestamp starts at an address that is a multiple of 8.

Upvotes: 4

Related Questions