PostgreSQL 中文参考文档
🌐 英文原版 官方 ↗

35.17. columns #

视图 columns 包含数据库中全部表列 (或视图列)的信息。 系统列 ( ctid 等)不包含在内。 只显示当前用户有权访问 (通过作为属主或拥有某些特权)的列。

Table 35.15. \1 字段列说明

Column Type

Description

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 标识一个字符或位串类型, 是声明中的最大长度;对其他所有数据类型或未声明最大长度时 为空。

character_octet_length cardinal_number

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

numeric_precision cardinal_number

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

numeric_precision_radix cardinal_number

如果 data_type 标识一个数值类型, 此列指示列 numeric_precision 和 numeric_scale 中的值以哪种进制表示。 取值为 2 或 10。 对其他所有数据类型,此列为空。

numeric_scale cardinal_number

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

datetime_precision cardinal_number

如果 data_type 标识日期、时间、时间戳或间隔 类型,此列包含该列所用类型的 (声明或隐含的)小数秒精度, 也就是秒值中小数点之后保留的十进制位数。 对其他所有数据类型,此列为空。

interval_type character_data

如果 data_type 标识一个间隔类型, 此列包含针对该列的间隔包含哪些字段的说明, 例如 YEAR TO MONTH、 DAY TO SECOND 等。 如果未指定字段限制 (即该间隔接受全部字段), 并且对所有其他数据类型,此字段为空。

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

包含该列排序规则的数据库的名称 (总是当前数据库);如果为默认或该列的数据类型不可 排序则为空

collation_schema sql_identifier

包含该列排序规则的模式的名字, 如果为默认或该列的数据类型不可排序则为 空

collation_name sql_identifier

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

domain_catalog sql_identifier

如果该列具有域类型, 是定义该域的数据库的名称 (总是当前数据库);否则为空。

domain_schema sql_identifier

如果该列具有域类型, 是定义该域的模式的名字;否则为空。

domain_name sql_identifier

如果该列具有域类型,则为该域的名字,否则为空。

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

总是为空,因为在 PostgreSQL 中数组的最大基数总是不受限制

dtd_identifier sql_identifier

该列的数据类型描述符的标识符,在与该表相关的数据类型 描述符之中唯一。 这主要用于与其他此类标识符的实例进行连接。 (标识符的具体格式未定义,也不保证在未来的版本中保持 不变。)

is_self_referencing yes_or_no

适用于 PostgreSQL 中不可用的特性

is_identity yes_or_no

如果该列是一个标识列则为 YES,否则为 NO。

identity_generation character_data

如果该列是一个标识列, 则为 ALWAYS 或 BY DEFAULT,反映该列的 定义。

identity_start character_data

如果该列是一个标识列, 是内部序列的开始值;否则为空。

identity_increment character_data

如果该列是一个标识列, 是内部序列的增量;否则为空。

identity_maximum character_data

如果该列是一个标识列, 是内部序列的最大值;否则为空。

identity_minimum character_data

如果该列是一个标识列, 是内部序列的最小值;否则为空。

identity_cycle yes_or_no

如果该列是一个标识列, 则内部序列循环时为 YES、不循环时为 NO; 否则为空。

is_generated character_data

如果该列是一个生成列则为 ALWAYS,否则为 NEVER。

generation_expression character_data

如果该列是一个生成列,则为生成表达式,否则为空。

is_updatable yes_or_no

如果该列可更新则为 YES,否则为 NO (基础表中的列总是可更新的, 视图中的列则不一定)


由于在 SQL 中可以用多种方式定义数据类型, 而 PostgreSQL 又包含额外的定义方式, 它们在信息模式中的表示可能有些困难。 列 data_type 被用来标识该列底层的内建 类型。 在 PostgreSQL 中,这意味着该类型定义在 系统目录模式 pg_catalog 中。 如果应用程序能够特殊处理那些众所周知的内建类型 (例如,以不同方式格式化数值类型, 或使用精度列中的数据), 这一列可能有用。 列 udt_name、 udt_schema 和 udt_catalog 总是标识该列底层数据类型,即使该列基于一个域。 (由于 PostgreSQL 把内建类型当作用户定义 类型对待,内建类型也会出现在这里。 这是对 SQL 标准的扩展。) 如果应用程序想根据类型以不同方式处理数据, 应当使用这些列,因为那样一来该列是否真的基于一个域就无关 紧要了。 如果该列基于一个域,域的标识存储在列 domain_name、 domain_schema 和 domain_catalog 中。 如果想把列与其关联的数据类型配对并把域当作独立的类型, 可以写 coalesce(domain_name, udt_name) 等。