Fui pego de surpresa ao descobrir que a is_nullable
coluna para esta consulta é digitada como character varying (3)
em vez de boolean
:
select
column_name,
data_type,
is_nullable
from
information_schema.columns
where
table_schema = 'public';
Percebi que algumas outras colunas usam "SIM"/"NÃO" também. Qual é a razão para isso? Meu pensamento inicial era que talvez outros valores além de "YES" e "NO" sejam possíveis, justificando algo diferente de a boolean
, mas não vi nenhum exemplo disso no meu banco de dados atual.
INFORMATION_SCHEMA
Usando o psql, você pode ver o esquema com
\d information_schema.columns
, ou pode procurá-lo nos documentos .Especificação SQL
Olhando para
information_schema.columns.is_nullable
a especificação, podemos ver que é culpa da especificação - como geralmente é o caso das coisas. Você não pode simplesmente apagar 9.000 anos de legado. Especialmente com algo que deveria fornecer uma interface confiável. Da especificação do SQL 2011,E você pode ver a definição de
INFORMATION_SCHEMA.YES_OR_NO
definido na especificação também,Catálogo específico de RDBMs do PostgreSQL
No entanto, se você não precisar da interface padronizada genérica, geralmente poderá encontrar algo mais sensato no
pg_catalog
. Neste caso você querpg_catalog.pg_attribute
. Vamos conferir\d pg_catalog.pg_attribute
,Aí está o seu booleano.
Documentos PostgreSQL
Os documentos do PostgreSQL sobre Esquema de Informações: Tipos de Dados também tratam disso,