Postgresql 中文操作指南
37.17. columns #
columns_视图包含有关数据库中所有表列(或视图列)的信息。不包括系统列(_ctid 等)。只显示当前用户有权访问的列(通过所有者或拥有一些权限进行访问)。
Table 37.15. columns Columns
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 标识字符或比特字符串类型,则为声明的最大长度;对于所有其他数据类型或 未声明最大长度时,则为 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) 等。