↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

支持中的版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发中的版本: 19 / 20devel
已结束支持的版本: 13 / 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
预发布版本文档。 PostgreSQL 19beta4 为测试版本,最终发布内容可能有所不同。

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

如果该列可能为 null,则为 YES;如果已知不能为 null,则为 NO。非空约束是确定列不能为 null 的一种依据,但也可能有其他依据。

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_precision 和 numeric_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 MONTH、DAY 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

如果该列是一个标识列,则为 ALWAYS 或者 BY 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_name、udt_schema 和 udt_catalog 总是标识列的底层数据类型,即使该列是基于一个域的(因为 PostgreSQL 对待内置类型和用户定义类型的方式是一样的,内置类型也出现在这里。这是 SQL 标准的一种扩展)。如果一个应用想要根据该类型以不同的方式处理数据,就应该使用这些列,因为在那种情况下即使该列确实基于一个域也没有关系。如果该列是基于一个域,该域的标识被存储在列 domain_name、domain_schema 和 domain_catalog。如果你想要把列和它们相关的数据类型配对并且把域视作单独的类型,你可以写 coalesce(domain_name, udt_name) 等等。

报告文档问题

阅读 上游文档. 反馈更正前请先核对 当前版本手册.