On this page
37.16. columns
视图columns
包含有关数据库中所有表列(或视图列)的信息。不包括系统列(oid
等)。仅显示当前用户有权访问的那些列(通过成为所有者或具有某些特权的方式)。
表 37.14. columns
列
Name | Data Type | Description |
---|---|---|
table_catalog |
sql_identifier |
包含表的数据库的名称(总是当前数据库) |
table_schema |
sql_identifier |
包含表的模式的名称 |
table_name |
sql_identifier |
表名 |
column_name |
sql_identifier |
栏名 |
ordinal_position |
cardinal_number |
表中列的 Sequences 位置(计数从 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 标识数字类型,则此列包含此列的(声明的或隐式的)精度。精度表示有效位数。如numeric_precision_radix 列中所示,它可以用十进制(以 10 为底)或二进制(以 2 为底)来表示。对于所有其他数据类型,此列为空。 |
numeric_precision_radix |
cardinal_number |
如果data_type 标识数字类型,则此列指示numeric_precision 和numeric_scale 列中的值表示的基础。该值为 2 或 10.对于所有其他数据类型,此列为空。 |
numeric_scale |
cardinal_number |
如果data_type 标识确切的数字类型,则此列包含此列的类型的(声明的或隐式的)标度。比例尺指示小数点右边的有效数字位数。如numeric_precision_radix 列中所示,它可以用十进制(以 10 为底)或二进制(以 2 为底)来表示。对于所有其他数据类型,此列为空。 |
datetime_precision |
cardinal_number |
如果data_type 标识日期,时间,时间戳或间隔类型,则此列包含此类型的(声明的或隐式的)小数秒精度,即秒值中小数点后保留的小数位数。对于所有其他数据类型,此列为空。 |
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 |
列的数据类型 Descriptors 的标识符,在与表有关的数据类型 Descriptors 中是唯一的。这主要用于与此类标识符的其他实例结合。 (未定义标识符的特定格式,并且不能保证在将来的版本中保持不变.) |
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 |
适用于 PostgreSQL 中不可用的功能 |
generation_expression |
character_data |
适用于 PostgreSQL 中不可用的功能 |
is_updatable |
yes_or_no |
YES 如果该列是可更新的,则NO 如果不是可更新(基表中的列始终是可更新的,视图中的列不一定) |
由于可以在 SQL 中以多种方式定义数据类型,而 PostgreSQL 包含其他定义数据类型的方式,因此在信息模式中表示它们可能有些困难。 data_type
列应标识该列的基础内置类型。在 PostgreSQL 中,这意味着类型是在系统目录架构pg_catalog
中定义的。如果应用程序可以专门处理众所周知的内置类型(例如,以不同的方式设置数字类型的格式或使用 precision 列中的数据),则此列可能很有用。列udt_name
,udt_schema
和udt_catalog
始终标识该列的基础数据类型,即使该列基于域也是如此。 (由于 PostgreSQL 将内置类型视为用户定义的类型,因此内置类型也会在此处显示.这是 SQL 标准的扩展.)如果应用程序希望根据类型对数据进行不同的处理,则应使用这些列。 ,因为在这种情况下,该列是否真的基于域并不重要。如果该列基于域,则域的身份存储在domain_name
,domain_schema
和domain_catalog
列中。如果您想将列及其关联的数据类型配对并将域视为单独的类型,则可以编写coalesce(domain_name, udt_name)
,等等。