CockroachDB提供了一个名为information_schema的虚拟schema,其中包含有关数据库的表,列,索引和视图的信息。 此信息可用于自我检查。

information_schema的定义是SQL标准的一部分,因此可以依赖它来保持稳定。 这与CockroachDB的SHOW语句形成对比,后者提供类似的数据,并且在CockroachDB中是稳定的,但不是标准化的。 它还与虚拟schemacrdb_internal形成对比,后者反映了CockroachDB的内部结构,因此可能会在CockroachDB版本中发生变化。

information_schema视图通常表示当前用户有权访问的对象。 要确保您可以查看数据库中的所有对象,请以root用户身份访问它。

information_schema展示的数据

要执行对象自我检查,你可以从相关的information_schema表中读取或使用CockroachDB的SHOW语句。

Object Information Schema Table Corresponding SHOW Statement
Columns columns SHOW COLUMNS
Constraints key_column_usage, referential_constraints, table_constraints SHOW CONSTRAINTS
Databases schemata SHOW DATABASE
Indexes statistics SHOW INDEX
Privileges schema_privileges, table_privileges SHOW GRANTS
Sequences sequences SHOW CREATE SEQUENCE
Tables tables SHOW TABLES
Views tables, views SHOW CREATE VIEW

information_schema中的表

虚拟schemainformation_schema包含表示数据库对象的虚拟表,也称为“系统视图”,下面将详细介绍每个对象。

这些与常规SQL视图的不同之处在于它们不显示从其他表的内容创建的数据。 相反,CockroachDB从访问的虚拟表生成数据。

查询可以指定没有数据库名称的表名(例如,SELECT * FROM information_schema.sequences)。 有关更多信息,请参阅名称解析

administrable_role_authorizations

administrable_role_authorizations标识当前用户具有admin选项的所有角色。

Column Description
grantee 授予此角色成员身份的用户的名称(始终是当前用户)。

applicable_roles

applicable_roles标识当前用户可以使用其权限的所有角色。 这意味着从当前用户到相关角色有一系列角色授予。 当前用户本身也是一个适用的角色,但未列出。

Column Description
grantee 授予角色成员资格的用户的名称(始终是当前用户)。
role_name 角色名
is_grantable 如果grantee在角色上有管理员权限为YES,否则为NO

columns

columns包含了每个表中列的信息。

Column Description
table_catalog 包含表的数据库名
table_schema 包含表的schema名
table_name 表名
column_name 列名
ordinal_position 表中列的序数位置(从1开始)。
column_default 列的默认值。
is_nullable 如果列可接受NULL,则为YES,否则为NO(例如它没有NOT NULL约束)
data_type 列的数据类型
character_maximum_length 如果data_typestring,则是字符的最大长度;否则为NULL
character_octet_length 如果data_typeSTRING, 值以八位字节(字节)的最大长度;否则为null
numeric_precision 如果data_type 是numeric, 精确或隐式精度 (即有效位数); 否则为 NULL.
numeric_scale 如果data_type是一个精确的数字类型, 规模(即小数点右边的位数。); 否则为 NULL.
datetime_precision
character_set_catalog 总是为NULL (CockroachDB不支持)
character_set_schema 总是为NULL (CockroachDB不支持)
character_set_name 总是为NULL (CockroachDB不支持)
generation_expression 用于计算计算列中列值的表达式。

column_privileges

column_privileges标识当前启用的角色为列授予的所有权限。 grantorgrantee和column(由table_catalogtable_schematable_namecolumn_name定义)的每个组合都有一行。

Column Description
grantor 授予该权限的角色的名称。
grantee 被授予该权限的角色的名称。
table_catalog 包含含有该列的表的数据库的名称(始终是当前数据库)。
table_schema 包含含有该列的表的schema的名称
table_name 表名
column_name 列名
privilege_type 权限名
is_grantable 总是为NULL (CockroachDB不支持).

enabled_roles

enabled_roles视图标识当前用户的已启用角色。 这包括直接和间接角色。

Column Description
role_name 角色名

key_column_usage

key_column_usage标识具有PRIMARY KEYUNIQUEFOREIGN KEY / REFERENCES约束的列。

Column Description
constraint_catalog 包含约束的数据库的名称。
constraint_schema 包含约束的schema名称
constraint_name 约束名
table_catalog 包含约束表的数据库的名称。
table_schema 包含约束表的schema的名称。
table_name 约束表名
column_name 约束列名
ordinal_position 约束内的列的顺序位置(从1开始)。
position_in_unique_constraint 对于外键约束,引用列在其唯一性约束内的序号位置(从1开始)。
### referential_constraints

referential_constraints标识所有引用(外键)约束。

Column Description
constraint_catalog 包含约束的数据库名
constraint_schema 包含约束的schema名
constraint_name 约束名
unique_constraint_catalog 包含外键约束引用的唯一约束或主键约束的数据库的名称(始终是当前数据库)。
unique_constraint_schema 包含外键约束引用的唯一约束或主键约束的schema的名称。
unique_constraint_name 唯一约束或主键约束的名称。
match_option 匹配外键约束的选项:FULLPARTIALNONE
update_rule 更新外键约束的规则:CASCADESET NULLSET DEFAULTRESTRICTNO ACTION
delete_rule 删除外键约束的规则:CASCADESET NULLSET DEFAULTRESTRICTNO ACTION
table_name 包含约束的表的名称。
referenced_table_name 包含外键约束引用的唯一键或主键约束的表的名称。

role_table_grants

role_table_grants identifies which privileges have been granted on tables or views where the grantor or grantee is a currently enabled role. This table is identical to table_privileges.

role_table_grants 标识在授予者或被授权者是当前启用的角色的表或视图上授予了哪些特权。 该表与table_privileges相同。

Column Description
grantor 授予该权限的角色名。
grantee 被授予权限的角色名
table_catalog 包含该表的数据库的名称。
table_schema 包含该表的schema的名称
table_name 表名
privilege_type 权限名
is_grantable 总是为NULL (CockroachDB不支持).
with_hierarchy 总是为NULL (CockroachDB不支持).

schema_privileges

schema_privileges标识在数据库级别为每个用户授予的权限。

Column Description
grantee 具有授权的用户的用户名
table_catalog 包含约束表的数据库的名称。
table_schema 包含约束表的schema名称
privilege_type 权限名
is_grantable 总是为NULL (CockroachDB不支持).

schemata

schemata标识数据库的schema。

Column Description
table_catalog 数据库名
table_schema schema名
default_character_set_name 总是为NULL (CockroachDB不支持).
sql_path 总是为NULL (CockroachDB不支持).

sequences

sequences 标识数据库中定义的序列。

Column Description
sequence_catalog 包含序列的数据库的名称。
sequence_schema 包含序列的schema的名称。
sequence_name 序列名
data_type 序列的数据类型
numeric_precision 序列data_type的(声明的或隐式的)精度。
numeric_precision_radix 表示numeric_precisionnumeric_scale列的值的基数。 值为210
numeric_scale 序列data_type的(声明的或隐式的)比例。 刻度表示小数点右侧的有效位数。 它可以用十进制(基数10)或二进制(基数2)表示,如numeric_precision_radix列中所指定。
start_value 序列的第一个值。
minimum_value 序列的最小值。
maximum_value 序列的最大值。
increment 序列递增的值。 负数会创建降序。 正数表示升序。
cycle_option 目前,所有序列都设置为NO CYCLE,序列不会换行。

statistics

statistics标识表索引。

Column Description
table_catalog 包含受约束表的数据库的名称。
table_schema 包含受约束表的schema的名称。
table_name 表名
non_unique 如果索引是使用UNIQUE约束创建的,则为NO; 如果索引不是用UNIQUE创建的,则为YES
index_schema 包含索引的数据库的名称。
index_name 索引的名称。
seq_in_index 列中的列的顺序位置(从1开始)。
column_name 被索引的列的名称
collation 总是为NULL (CockroachDB不支持).
cardinality 总是为NULL (CockroachDB不支持).
direction ASC(升序)或DESC(降序)顺序。
storing 如果存储了列,则为YES; 如果它已被索引或隐含,则为NO
implicit 如果列是隐式的,则为YES(即,未在索引中指定并且未存储); 如果索引或存储,则为NO

table_constraints

table_constraints标识应用于表的约束。

Column Description
constraint_catalog 包含约束的数据库的名称。
constraint_schema 包含约束的schema的名称。
constraint_name 约束名
table_catalog 包含约束表的数据库的名称。
table_schema 包含约束表的schema的名称。
table_name 受约束表的名称。
constraint_type 约束类型:CHECKFOREIGN KEYPRIMARY KEYUNIQUE
is_deferrable 如果约束可以推迟,则为YES; 否则为NO
initially_deferred 如果约束是可推迟的,并且初始为推迟则为YES ,否则为NO

table_privileges

table_privileges标识在表级别为每个用户授予的权限。

Column Description
grantor 总是为NULL (CockroachDB不支持).
grantee 具有授权的用户的用户名。
table_catalog 授权适用的数据库的名称。
table_schema 授权适用的schema的名称。
table_name 授权适用的表的名称。
privilege_type 授权类型:SELECTINSERTUPDATEDELETETRUNCATEREFERENCESTRIGGER
is_grantable 总是为NULL (CockroachDB不支持).
with_hierarchy 总是为NULL (CockroachDB不支持).

tables

tables标识数据库中的表和视图。

Column Description
table_catalog 包含该表的数据库的名称。
table_schema 包含该表的schema的名称。
table_name 表名
table_type 表的类型:普通表的BASE TABLE,视图的VIEW,或CockroachDB创建的视图的SYSTEM VIEW
version 表的版本号; 版本从1开始,每次在表上发出ALTER TABLE语句时递增。

user_privileges

user_privileges标识全局特权。

目前,CockroachDB不支持非root用户的全局权限。 因此,此视图仅包含root用户的全局权限。

Column Description
grantee 具有授权的用户的用户名。
table_catalog 权限适用的数据库的名称。
privilege_type 权限类型
is_grantable 总是为NULL (CockroachDB不支持).

views

views标识数据库中的视图。

Column Description
table_catalog 包含视图的数据库的名称。
table_schema 包含视图的表的名称。
table_name 视图名
view_definition 用来创建视图的AS子句
check_option 总是为NULL (CockroachDB不支持).
is_updatable 总是为NULL (CockroachDB不支持).
is_insertable_into 总是为NULL (CockroachDB不支持).
is_trigger_updatable 总是为NULL (CockroachDB不支持).
is_trigger_deletable 总是为NULL (CockroachDB不支持).
is_trigger_insertable_into 总是为NULL (CockroachDB不支持).

示例

从Information Schema表中检索所有列

> SELECT * FROM db_name.information_schema.table_constraints;
+--------------------+-------------------+-----------------+---------------+--------------+-------------+-----------------+---------------+--------------------+
| constraint_catalog | constraint_schema | constraint_name | table_catalog | table_schema | table_name  | constraint_type | is_deferrable | initially_deferred |
+--------------------+-------------------+-----------------+---------------+--------------+-------------+-----------------+---------------+--------------------+
| jsonb_test         | public            | primary         | jsonb_test    | public       | programming | PRIMARY KEY     | NO            | NO                 |
+--------------------+-------------------+-----------------+---------------+--------------+-------------+-----------------+---------------+--------------------+

从 Information Schema 表中检索特定列

> SELECT table_name, constraint_name FROM db_name.information_schema.table_constraints;
+-------------+-----------------+
| table_name  | constraint_name |
+-------------+-----------------+
| programming | primary         |
+-------------+-----------------+

See Also