AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 205471
Accepted
devuxer
devuxer
Asked: 2018-05-02 10:06:50 +0800 CST2018-05-02 10:06:50 +0800 CST 2018-05-02 10:06:50 +0800 CST

为什么 information_schema 有“YES”和“NO”字符串而不是布尔值?

  • 772

我惊讶地发现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,但我在当前数据库中没有看到任何这样的例子。

postgresql information-schema
  • 1 1 个回答
  • 1661 Views

1 个回答

  • Voted
  1. Best Answer
    Evan Carroll
    2018-05-02T10:26:22+08:002018-05-02T10:26:22+08:00

    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       |           |          | 
    

    SQL 规范

    在规范中查找,information_schema.columns.is_nullable我们可以看到这是规范的错——就像事情经常发生的情况一样。你不能只抹去 9,000 年的遗产。特别是对于应该提供可靠接口的东西。根据 SQL 2011 规范,

    IS_NULLABLE INFORMATION_SCHEMA.YES_OR_NO
      CONSTRAINT COLUMNS_IS_NULLABLE_NOT_NULL NOT NULL,
    

    你也可以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;
    

    PostgreSQL 的 RDBM 特定目录

    但是,如果您不需要通用标准化接口,通常可以在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 | 
    

    有你的布尔值。

    PostgreSQL 文档

    Information Schema: Data Types 上的PostgreSQL 文档实际上也解决了这个问题,

    包含YES或NO的字符串域。这用于表示信息模式中的布尔(真/假)数据。(信息模式是在类型boolean被添加到 SQL 标准之前发明的,所以这个约定对于保持信息模式向后兼容是必要的。)

    • 12

相关问题

  • 我可以在使用数据库后激活 PITR 吗?

  • 运行时间偏移延迟复制的最佳实践

  • 存储过程可以防止 SQL 注入吗?

  • PostgreSQL 中 UniProt 的生物序列

  • PostgreSQL 9.0 Replication 和 Slony-I 有什么区别?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve