我惊讶地发现is_nullable
这个查询的列被输入为character varying (3)
而不是boolean
:
select
column_name,
data_type,
is_nullable
from
information_schema.columns
where
table_schema = 'public';
我注意到其他一些列也使用“YES”/“NO”。这样做的理由是什么?我最初的想法是,也许除了 "YES" 和 "NO" 之外的其他值也是可能的,证明 a 以外的其他值是合理的boolean
,但我在当前数据库中没有看到任何这样的例子。
INFORMATION_SCHEMA
使用 psql 你可以看到架构
\d information_schema.columns
,或者你可以在文档中查找它。SQL 规范
在规范中查找,
information_schema.columns.is_nullable
我们可以看到这是规范的错——就像事情经常发生的情况一样。你不能只抹去 9,000 年的遗产。特别是对于应该提供可靠接口的东西。根据 SQL 2011 规范,你也可以
INFORMATION_SCHEMA.YES_OR_NO
在规范中看到定义的定义,PostgreSQL 的 RDBM 特定目录
但是,如果您不需要通用标准化接口,通常可以在
pg_catalog
. 在这种情况下,您想要pg_catalog.pg_attribute
. 让我们检查一下\d pg_catalog.pg_attribute
,有你的布尔值。
PostgreSQL 文档
Information Schema: Data Types 上的PostgreSQL 文档实际上也解决了这个问题,