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

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 12 已结束支持。 2024-11-21. 请参阅 当前版本手册.

36.17. columns #

视图 columns 包含数据库中有关所有表列(或视图列)的信息。系统列(ctid 等)不被包括在内。只有那些当前用户能够访问(作为拥有者或具有某些权限)的列才被显示。

表 36.15. columns 列

名称数据类型 描述
table_catalogsql_identifier 包含表的数据库的名称(总是当前数据库)
table_schemasql_identifier 包含表的模式的名称
table_namesql_identifier 表的名称
column_namesql_identifier 列名称
ordinal_positioncardinal_number 该列在表内的顺序位置(从 1 开始计)
column_defaultcharacter_data 该列的默认表达式
is_nullableyes_or_no 如果该列可能为 null,则为 YES;如果已知不能为 null,则为 NO。非空约束是确定列不能为 null 的一种依据,但也可能有其他依据。
data_typecharacter_data 如果该列的数据类型是内置类型,则为该列的数据类型;如果是数组,则为 ARRAY(此时参见视图 element_types);否则为 USER-DEFINED(此时由 udt_name 及相关列标识该类型)。如果该列基于一个域,则此列指的是该域的底层类型(该域由 domain_name 及相关列标识)。
character_maximum_lengthcardinal_number 如果 data_type 标识字符类型或位串类型,则为声明的最大长度;对于其他所有数据类型,或未声明最大长度时,则为 null。
character_octet_lengthcardinal_number 如果 data_type 标识字符类型,这里是一个数据值可能的最大字节长度;对于所有其他数据类型则为 null。最大字节长度取决于声明的字符最大长度(见上文)和服务器编码。
numeric_precisioncardinal_number 如果 data_type 标识数值类型,此列包含该列数据类型的(声明的或隐式的)精度。精度表示有效位数。它可以按十进制(基数 10)或二进制(基数 2)表示,具体由 numeric_precision_radix 列指定。对于其他所有数据类型,此列为 null。
numeric_precision_radixcardinal_number 如果 data_type 标识数值类型,此列指示 numeric_precision 和 numeric_scale 列中的值采用的进制。值为 2 或 10。对于其他所有数据类型,此列为 null。
numeric_scalecardinal_number 如果 data_type 标识精确数值类型,此列包含该列数据类型的(声明的或隐式的)小数位数。小数位数表示小数点右侧的有效位数。它可以按十进制(基数 10)或二进制(基数 2)表示,具体由 numeric_precision_radix 列指定。对于其他所有数据类型,此列为 null。
datetime_precisioncardinal_number 如果 data_type 标识日期、时间、时间戳或时间间隔类型,此列包含该列数据类型的(声明的或隐式的)小数秒精度,即秒值小数点后保留的十进制位数。对于其他所有数据类型,此列为 null。
interval_typecharacter_data 如果 data_type 标识时间间隔类型,此列说明该列的时间间隔包含哪些字段,例如 YEAR TO MONTH、DAY TO SECOND 等。未指定字段限制时(即时间间隔接受所有字段),或对于其他所有数据类型,此列为 null。
interval_precisioncardinal_number 对应 PostgreSQL 不支持的特性(关于时间间隔类型列的小数秒精度,参见 datetime_precision)
character_set_catalogsql_identifier 对应 PostgreSQL 不支持的特性
character_set_schemasql_identifier 对应 PostgreSQL 不支持的特性
character_set_namesql_identifier 对应 PostgreSQL 不支持的特性
collation_catalogsql_identifier 包含该列排序规则的数据库名称(总是当前数据库);如果使用默认排序规则,或该列的数据类型不支持排序规则,则为 null。
collation_schemasql_identifier 包含该列排序规则的模式名称;如果使用默认排序规则,或该列的数据类型不支持排序规则,则为 null。
collation_namesql_identifier 该列排序规则的名称;如果使用默认排序规则,或该列的数据类型不支持排序规则,则为 null。
domain_catalogsql_identifier 如果该列有一个域类型,这里是该域所在的数据库名(总是当前数据库),否则为 null。
domain_schemasql_identifier 如果该列有一个域类型,这里是该域所在的模式名,否则为 null。
domain_namesql_identifier 如果该列有一个域类型,这里是该域的名称,否则为 null。
udt_catalogsql_identifier 该列数据类型(如果适用,则为域的底层类型)所在的数据库名称(总是当前数据库)
udt_schemasql_identifier 该列数据类型(如果适用,则为域的底层类型)所在的模式名称
udt_namesql_identifier 该列数据类型(如果适用,则为域的底层类型)的名称
scope_catalogsql_identifier 对应 PostgreSQL 不支持的特性
scope_schemasql_identifier 对应 PostgreSQL 不支持的特性
scope_namesql_identifier 对应 PostgreSQL 不支持的特性
maximum_cardinalitycardinal_number 总是为 null,因为 PostgreSQL 中数组的最大基数始终不受限制
dtd_identifiersql_identifier 该列的数据类型描述符的标识符,在属于同一表的数据类型描述符中是唯一的。它主要用于与其他此类标识符实例进行连接。(标识符的具体格式没有定义,也不保证在未来版本中保持不变。)
is_self_referencingyes_or_no 对应 PostgreSQL 不支持的特性
is_identityyes_or_no 如果该列是一个标识列,则为 YES,否则为 NO。
identity_generationcharacter_data 如果该列是一个标识列,则为 ALWAYS 或者 BY DEFAULT,它反映该列的定义。
identity_startcharacter_data 如果该列是一个标识列,则是内部序列的起始值,否则为 null。
identity_incrementcharacter_data 如果该列是一个标识列,则是内部序列的增量,否则为 null。
identity_maximumcharacter_data 如果该列是一个标识列,则是内部序列的最大值,否则为 null。
identity_minimumcharacter_data 如果该列是一个标识列,则是内部序列的最小值,否则为 null。
identity_cycleyes_or_no 如果该列是一个标识列,则 YES 和 NO 分别表示内部序列可循环和不可循环,否则为 null。
is_generatedcharacter_data 如果该列是生成列,则为 ALWAYS,否则为 NEVER。
generation_expressioncharacter_data 如果该列是生成列,则为生成表达式,否则为 null。
is_updatableyes_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) 等等。

报告文档问题

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