dev*_*xer 7 postgresql information-schema sql-standard
我惊讶地发现is_nullable
此查询的列被键入character varying (3)
而不是boolean
:
select
column_name,
data_type,
is_nullable
from
information_schema.columns
where
table_schema = 'public';
Run Code Online (Sandbox Code Playgroud)
我注意到其他一些列也使用“是”/“否”。这样做的理由是什么?我最初的想法是,也许除了 "YES" 和 "NO" 之外的其他值也是可能的,证明 a 以外的其他值是合理的boolean
,但我在当前的数据库中没有看到任何这样的例子。
Eva*_*oll 12
INFORMATION_SCHEMA
使用 psql,您可以使用 来查看架构\d information_schema.columns
,或者您可以在文档中查找它。
View "information_schema.columns"
Column | Type | Collation | Nullable | Default
--------------------------+------------------------------------+-----------+----------+---------
... stuff cropped..
is_nullable | information_schema.yes_or_no | | |
Run Code Online (Sandbox Code Playgroud)
查看information_schema.columns.is_nullable
规范,我们可以看到这是规范的错——就像东西的情况一样。你不能只是抹去 9,000 年的遗产。尤其是那些应该提供可靠接口的东西。从 SQL 2011 规范,
IS_NULLABLE INFORMATION_SCHEMA.YES_OR_NO
CONSTRAINT COLUMNS_IS_NULLABLE_NOT_NULL NOT NULL,
Run Code Online (Sandbox Code Playgroud)
你也可以INFORMATION_SCHEMA.YES_OR_NO
在规范中看到定义的定义,
CREATE DOMAIN YES_OR_NO AS
CHARACTER VARYING (3)
CHARACTER SET SQL_IDENTIFIER
CONSTRAINT YES_OR_NO_CHECK
CHECK (VALUE IN ( 'YES', 'NO' ) );
GRANT USAGE ON DOMAIN YES_OR_NO
TO PUBLIC WITH GRANT OPTION;
Run Code Online (Sandbox Code Playgroud)
如果你不需要通用的标准化接口,你通常可以在pg_catalog
. 在这种情况下,您想要pg_catalog.pg_attribute
. 让我们检查一下\d pg_catalog.pg_attribute
,
Table "pg_catalog.pg_attribute"
Column | Type | Collation | Nullable | Default
---------------+-----------+-----------+----------+---------
attnotnull | boolean | | not null |
Run Code Online (Sandbox Code Playgroud)
有你的布尔值。
关于信息架构的PostgreSQL 文档:数据类型实际上也解决了这个问题,
包含YES或NO 的字符串域。这用于表示信息模式中的布尔(真/假)数据。(信息模式是在将类型
boolean
添加到 SQL 标准之前发明的,因此此约定对于保持信息模式向后兼容是必要的。)
归档时间: |
|
查看次数: |
1409 次 |
最近记录: |