2025年9月25日: PostgreSQL 18 发布!
支持的版本: 当前 (18) / 17 / 16 / 15 / 14 / 13
开发版本: devel
不再支持的版本: 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4

35.17. columns #

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

表 35.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 标识字符类型,则为单个数据项的最大可能字节数(bytes);对于所有其他数据类型,则为 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

generation_expression character_data

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

is_updatable yes_or_no

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


由于 SQL 中定义数据类型的方式多种多样,并且 PostgreSQL 包含额外的定义数据类型的方式,因此它们在信息模式中的表示可能有些困难。列 data_type 用于标识列的底层内置类型。在 PostgreSQL 中,这意味着该类型在系统目录模式 pg_catalog 中定义。如果应用程序可以特殊处理已知内置类型(例如,以不同的方式格式化数值类型或使用精度列中的数据),则此列可能很有用。udt_nameudt_schemaudt_catalog 列始终标识列的底层数据类型,即使列基于领域也是如此。(由于 PostgreSQL 将内置类型视为用户定义类型,因此内置类型也在此处显示。这是对 SQL 标准的扩展。)如果应用程序想根据类型以不同方式处理数据,则应使用这些列,因为在这种情况下,列是否基于领域并不重要。如果列基于领域,则领域标识存储在 domain_namedomain_schemadomain_catalog 列中。如果要将列与其关联数据类型配对并将领域视为独立类型,则可以编写 coalesce(domain_name, udt_name) 等。

提交更正

如果您在文档中看到任何不正确、与您对特定功能的体验不符或需要进一步说明的内容,请使用 此表单 报告文档问题。