Thread: Boolean type storage format

Boolean type storage format

From
"Alexander Gataric"
Date:
What is the data physically stored as for boolean type? I know that it is one byte but is it char, int, or something else?

Sent from my smartphone

Re: Boolean type storage format

From
Raghavendra
Date:
On Wed, Oct 31, 2012 at 8:52 PM, Alexander Gataric <gataric@usa.net> wrote:
What is the data physically stored as for boolean type? I know that it is one byte but is it char, int, or something else?


False represented by zero bytes and True by 1 byte with value 1.

---
Regards,
Raghavendra
EnterpriseDB Corporation

Re: Boolean type storage format

From
Mike Christensen
Date:
It would also matter what columns were next to it, correct?

For example, if you had 4 bools in a row, that could also be 1 byte..

On Wed, Oct 31, 2012 at 11:08 AM, Raghavendra <raghavendra.rao@enterprisedb.com> wrote:
On Wed, Oct 31, 2012 at 8:52 PM, Alexander Gataric <gataric@usa.net> wrote:
What is the data physically stored as for boolean type? I know that it is one byte but is it char, int, or something else?


False represented by zero bytes and True by 1 byte with value 1.

---
Regards,
Raghavendra
EnterpriseDB Corporation


Re: Boolean type storage format

From
Craig Ringer
Date:
On 11/01/2012 02:25 AM, Mike Christensen wrote:
> It would also matter what columns were next to it, correct?
It doesn't look like PostgreSQL packs booleans. It still matters what's
next to it because of the alignment requirements of other data types,
but you still have a minimum of one byte per boolean. See:

regress=> SELECT pg_column_size( ROW('t'::boolean) );
 pg_column_size
----------------
             25
(1 row)

regress=> SELECT pg_column_size( ROW('t'::boolean, 't'::boolean) );
 pg_column_size
----------------
             26
(1 row)

regress=> SELECT pg_column_size( ROW('t'::boolean, 't'::boolean,
'f'::boolean, 't'::boolean) );
 pg_column_size
----------------
             28
(1 row)

--
Craig Ringer


Re: Boolean type storage format

From
Marti Raudsepp
Date:
On Wed, Oct 31, 2012 at 8:08 PM, Raghavendra
<raghavendra.rao@enterprisedb.com> wrote:
> False represented by zero bytes and True by 1 byte with value 1.

This is not true AFAIK. Both boolean TRUE and FALSE values require 1 byte.

A NULL value is zero bytes (though it still consumes 1 bit in the null
bitmap). This is true for all types, not just boolean.

Regards,
Marti