Skip to content

37.17.columns#

视图columns包含数据库中所有表列(或视图列)的信息。系统列(ctid等)不包括在内。仅显示当前用户有权访问的列(通过所有者或拥有某些权限的方式)。

表 37.15.columns

列类型

说明

table_catalog sql_identifier

包含该表的数据库的名称(始终为当前数据库)

table_schema sql_identifier

包含该表的架构的名称

table_name sql_identifier

表的名称

column_name sql_identifier

列的名称

ordinal_position cardinal_number

列在表中的序号(从 1 开始计数)

column_default character_data

列的默认表达式

is_nullable yes_or_no

如果列可能为可空,则为 YES;如果已知列不可空,则为 NO。非空约束是已知列不可空的一种方式,但可能还有其他方式。

data_type character_data

列的数据类型(如果它是内置类型)或 ARRAY(如果是某种数组,在这种情况下,请参见视图 element_types),否则为 USER-DEFINED(在这种情况下,类型在 udt_name 和关联列中标识)。如果列基于域,则此列引用该域底层类型(且该域在 domain_name 和关联列中标识)。

character_maximum_length cardinal_number

如果 data_type 标识字符或位串类型,则为声明的最大长度;对于所有其他数据类型或未声明最大长度,则为 null。

character_octet_length cardinal_number

如果 data_type 标识字符类型,则为数据项可能的最大长度(以八位字节为单位);对于所有其他数据类型,则为 null。最大八位字节长度取决于声明的字符最大长度(见上文)和服务器编码。

numeric_precision cardinal_number

如果 data_type 标识数值类型,则此列包含此列类型的(声明或隐式)精度。精度表示有效数字的位数。它可以用十进制(基数 10)或二进制(基数 2)表示,如列 numeric_precision_radix 中所指定。对于所有其他数据类型,此列为 null。

numeric_precision_radix cardinal_number

如果 data_type 标识数值类型,则此列指示列 numeric_precisionnumeric_scale 中的值以哪个基数表示。该值可以是 2 或 10。对于所有其他数据类型,此列为 null。

numeric_scale cardinal_number

如果 data_type 标识精确数值类型,则此列包含此列类型的(声明或隐式)刻度。刻度表示小数点右侧有效数字的位数。它可以用十进制(基数 10)或二进制(基数 2)表示,如列 numeric_precision_radix 中所指定。对于所有其他数据类型,此列为 null。

datetime_precision cardinal_number

如果 data_type 标识日期、时间、时间戳或间隔类型,则此列包含此列类型的(声明或隐式)小数秒精度,即秒值小数点后保留的小数位数。对于所有其他数据类型,此列为 null。

interval_type character_data

如果 data_type 标识间隔类型,则此列包含此列的间隔所包含字段的规范,例如,YEAR TO MONTHDAY TO SECOND 等。如果未指定字段限制(即,间隔接受所有字段),并且对于所有其他数据类型,此字段为 null。

interval_precision cardinal_number

适用于 PostgreSQL 中不可用的功能(请参阅 datetime_precision 以了解间隔类型列的小数秒精度)

character_set_catalog sql_identifier

适用于 PostgreSQL 中不可用的功能

character_set_schema sql_identifier

适用于 PostgreSQL 中不可用的功能

character_set_name sql_identifier

适用于 PostgreSQL 中不可用的功能

collation_catalog sql_identifier

包含列的排序规则的数据库名称(始终为当前数据库),如果为默认值或列的数据类型不可排序,则为 null

collation_schema sql_identifier

包含列的排序规则的架构名称,如果为默认值或列的数据类型不可排序,则为 null

collation_name sql_identifier

列的排序规则名称,如果为默认值或列的数据类型不可排序,则为 null

domain_catalog sql_identifier

如果列具有域类型,则为定义域的数据库名称(始终为当前数据库),否则为 null。

domain_schema sql_identifier

如果列具有域类型,则为定义域的架构名称,否则为 null。

domain_name sql_identifier

如果列具有域类型,则为域名称,否则为 null。

udt_catalog sql_identifier

定义列数据类型(如果适用,则为域的底层类型)的数据库的名称(始终为当前数据库)

udt_schema sql_identifier

定义列数据类型(如果适用,则为域的底层类型)的架构的名称

udt_name sql_identifier

列数据类型的名称(如果适用,则为域的底层类型)

scope_catalog sql_identifier

适用于 PostgreSQL 中不可用的功能

scope_schema sql_identifier

适用于 PostgreSQL 中不可用的功能

scope_name sql_identifier

适用于 PostgreSQL 中不可用的功能

maximum_cardinality cardinal_number

始终为 null,因为在 PostgreSQL 中,数组始终具有无限的最大基数

dtd_identifier sql_identifier

列的数据类型描述符的标识符,在属于表的那些数据类型描述符中是唯一的。这主要用于与此类标识符的其他实例进行联接。(标识符的具体格式未定义,并且不保证在未来版本中保持不变。)

is_self_referencing yes_or_no

适用于 PostgreSQL 中不可用的功能

is_identity yes_or_no

如果列是标识列,则为 YES,否则为 NO

identity_generation character_data

如果列是标识列,则为 ALWAYSBY DEFAULT,反映了列的定义。

identity_start character_data

如果列是标识列,则为内部序列的起始值,否则为 null。

identity_increment character_data

如果列是标识列,则为内部序列的增量,否则为 null。

identity_maximum character_data

如果列是标识列,则为内部序列的最大值,否则为 null。

identity_minimum character_data

如果列是标识列,则为内部序列的最小值,否则为 null。

identity_cycle yes_or_no

如果列是标识列,则如果内部序列循环,则为 YES,如果不循环,则为 NO;否则为 null。

is_generated character_data

如果列是生成列,则为 ALWAYS,否则为 NEVER

生成表达式 字符数据

如果该列是生成列,则为生成表达式,否则为 null。

可更新 yes_or_no

如果该列可更新,则为 YES,如果不可更新,则为 NO(基本表中的列始终可更新,视图中的列不一定可更新)

由于数据类型可以在 SQL 中以多种方式定义,并且PostgreSQL包含定义数据类型的其他方式,因此它们在信息架构中的表示可能有些困难。列数据类型应该标识列的底层内置类型。在PostgreSQL中,这意味着该类型在系统目录架构pg_catalog中定义。如果应用程序可以专门处理众所周知的内置类型(例如,以不同的方式设置数字类型格式或使用精度列中的数据),则此列可能很有用。列udt_nameudt_schemaudt_catalog始终标识列的底层数据类型,即使该列基于域也是如此。(由于PostgreSQL将内置类型视为用户定义类型,因此内置类型也会显示在此处。这是 SQL 标准的扩展。)如果应用程序希望根据类型对数据进行不同的处理,则应使用这些列,因为在这种情况下,该列是否真正基于域并不重要。如果该列基于域,则域的身份存储在列domain_namedomain_schemadomain_catalog中。如果您想将列与其关联的数据类型配对并将域视为单独的类型,则可以编写coalesce(domain_name, udt_name)等。