8.6. Boolean Type
  
   PostgreSQL
  
  provides the
    standard
  
   SQL
  
  type
  
   boolean
  
  ;
    see
  
   Table 8.19
  
  .
    The
  
   boolean
  
  type can have several states:
  
   "
   
    true
   
   "
  
  ,
  
   "
   
    false
   
   "
  
  , and a third state,
  
   "
   
    unknown
   
   "
  
  , which is represented by the
  
   SQL
  
  null value.
 
Table 8.19. Boolean Data Type
| Name | Storage Size | Description | 
|---|---|---|
| 
        boolean
        | 1 byte | state of true or false | 
  Boolean constants can be represented in SQL queries by the SQL
    key words
  
   TRUE
  
  ,
  
   FALSE
  
  ,
    and
  
   NULL
  
  .
 
  The datatype input function for type
  
   boolean
  
  accepts these
    string representations for the
  
   "
   
    true
   
   "
  
  state:
 
| 
     true
     | 
| 
     yes
     | 
| 
     on
     | 
| 
     1
     | 
and these representations for the " false " state:
| 
     false
     | 
| 
     no
     | 
| 
     off
     | 
| 
     0
     | 
  Unique prefixes of these strings are also accepted, for
    example
  
   t
  
  or
  
   n
  
  .
    Leading or trailing whitespace is ignored, and case does not matter.
 
  The datatype output function for type
  
   boolean
  
  always emits
    either
  
   t
  
  or
  
   f
  
  , as shown in
  
   Example 8.2
  
  .
 
   
    Example 8.2. Using the
    
     boolean
    
    Type
   
  
CREATE TABLE test1 (a boolean, b text); INSERT INTO test1 VALUES (TRUE, 'sic est'); INSERT INTO test1 VALUES (FALSE, 'non est'); SELECT * FROM test1; a | b ---+--------- t | sic est f | non est SELECT * FROM test1 WHERE a; a | b ---+--------- t | sic est
  The key words
  
   TRUE
  
  and
  
   FALSE
  
  are
    the preferred (
  
   SQL
  
  -compliant) method for writing
    Boolean constants in SQL queries.  But you can also use the string
    representations by following the generic string-literal constant syntax
    described in
  
   Section 4.1.2.7
  
  , for
    example
  
   'yes'::boolean
  
  .
 
  Note that the parser automatically understands
    that
  
   TRUE
  
  and
  
   FALSE
  
  are of
    type
  
   boolean
  
  , but this is not so
    for
  
   NULL
  
  because that can have any type.
    So in some contexts you might have to cast
  
   NULL
  
  to
  
   boolean
  
  explicitly, for
    example
  
   NULL::boolean
  
  .  Conversely, the cast can be
    omitted from a string-literal Boolean value in contexts where the parser
    can deduce that the literal must be of type
  
   boolean
  
  .