Use o tipo de dados BOOLEAN para armazenar valores verdadeiros e falsos em uma coluna de único byte. A tabela a seguir descreve os três estados possíveis para um valor booleano e os valores de literal que resultam naquele estado. Independente da string de entrada, a coluna booleana armazena e fornece "t" para verdadeiro e "f" para falso.
Estado | Valores válidos de literal | Armazenamento |
---|---|---|
Verdadeiro | TRUE 't' 'true' 'y' 'yes' '1'
|
1 byte |
Falso | FALSE 'f' 'false' 'n' 'no' '0'
|
1 byte |
Desconhecido | NULL
|
1 byte |
É possível usar uma comparação IS para verificar um valor booleano somente como um predicado na cláusula WHERE. Não é possível usar a comparação IS com um valor booleano na lista SELECT.
Exemplos
Você pode usar uma coluna BOOLEAN para armazenar um estado "Ativo/inativo" para cada cliente em uma tabela CUSTOMER.
create table customer(
custid int,
active_flag boolean default true);
insert into customer values(100, default);
select * from customer;
custid | active_flag
-------+--------------
100 | t
Se nenhum valor padrão (true
ou false
) é especificado na instrução CREATE TABLE, inserir um nome padrão significa inserir um null.
Neste exemplo, a consulta seleciona usuários da tabela USERS que gostam de esportes, mas não gostam de teatro:
select firstname, lastname, likesports, liketheatre
from users
where likesports is true and liketheatre is false
order by userid limit 10;
firstname | lastname | likesports | liketheatre
----------+------------+------------+-------------
Lars | Ratliff | t | f
Mufutau | Watkins | t | f
Scarlett | Mayer | t | f
Shafira | Glenn | t | f
Winifred | Cherry | t | f
Chase | Lamb | t | f
Liberty | Ellison | t | f
Aladdin | Haney | t | f
Tashya | Michael | t | f
Lucian | Montgomery | t | f
(10 rows)
O exemplo a seguir seleciona usuários da tabela USERS para os quais não se sabe se eles gostam de rock:
select firstname, lastname, likerock
from users
where likerock is unknown
order by userid limit 10;
firstname | lastname | likerock
----------+----------+----------
Rafael | Taylor |
Vladimir | Humphrey |
Barry | Roy |
Tamekah | Juarez |
Mufutau | Watkins |
Naida | Calderon |
Anika | Huff |
Bruce | Beck |
Mallory | Farrell |
Scarlett | Mayer |
(10 rows)
O exemplo a seguir retorna um erro porque ele usa uma comparação IS na lista SELECT.
select firstname, lastname, likerock is true as "check"
from users
order by userid limit 10;
[Amazon](500310) Invalid operation: Not implemented
O exemplo a seguir é bem-sucedido porque ele usa uma comparação igual (=) na lista SELECT em vez da comparação IS.
select firstname, lastname, likerock = true as "check"
from users
order by userid limit 10;
firstname | lastname | check
----------+-----------+------
Rafael | Taylor |
Vladimir | Humphrey |
Lars | Ratliff | true
Barry | Roy |
Reagan | Hodge | true
Victor | Hernandez | true
Tamekah | Juarez |
Colton | Roy | false
Mufutau | Watkins |
Naida | Calderon |