pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
columns #视图 columns 包含数据库中有关所有表列(或视图列)的信息。系统列(ctid 等)不被包括在内。只有那些当前用户能够访问(作为拥有者或具有某些权限)的列才被显示。
表 36.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) 等等。
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。