信息架构是每个 Cloud Spanner 数据库通用的内置架构。您可以对 INFORMATION_SCHEMA
中的表运行 SQL 查询来提取数据库的架构元数据。
例如,以下查询可提取数据库中所有用户定义的表的名称:
SELECT
table_name
FROM
information_schema.tables
WHERE
table_schema = ''
用法
INFORMATION_SCHEMA
表只能通过 SQL 接口使用,例如:executeQuery
APIgcloud spanner databases execute-sql
命令- Google Cloud 控制台中数据库的查询页面)
其他单次读取方法不支持
INFORMATION_SCHEMA
。针对
INFORMATION_SCHEMA
的查询可以使用强、有界限过时或精确过时时间戳边界。如果您使用的是 PostgreSQL 方言数据库,请参阅 PostgreSQL 方言数据库的信息架构。
如果您是精细的访问权限控制用户,系统会过滤
INFORMATION_SCHEMA
表,以仅显示您有权访问的架构元素。
INFORMATION_SCHEMA 中的表
SCHEMATA
INFORMATION_SCHEMA.SCHEMATA
表列出了数据库中的架构。这些架构包括信息架构和一个未命名架构(以下称为“默认架构”),后者包含您定义的表。
列名 | 类型 | 说明 |
---|---|---|
CATALOG_NAME |
STRING |
目录的名称。此列的存在是为了与 SQL 标准信息架构表兼容。此列始终是一个空字符串。 |
SCHEMA_NAME |
STRING |
架构的名称。这对于默认架构为空,对于命名架构不为空。 |
DATABASE_OPTIONS
此表列出了在数据库上设置的选项。
列名 | 类型 | 说明 |
---|---|---|
CATALOG_NAME |
STRING |
目录的名称。始终为空字符串。 |
SCHEMA_NAME |
STRING |
架构的名称。如果未命名,则为空字符串。 |
OPTION_NAME |
STRING |
数据库选项的名称。 |
OPTION_TYPE |
STRING |
数据库选项的数据类型。 |
OPTION_VALUE |
STRING |
数据库选项值。 |
TABLES
此表列出了架构中的表和视图。
列名 | 类型 | 说明 |
---|---|---|
TABLE_CATALOG |
STRING |
目录的名称。始终为空字符串。 |
TABLE_SCHEMA |
STRING |
架构的名称。如果未命名,则为空字符串。 |
TABLE_NAME |
STRING |
表或视图的名称。 |
TABLE_TYPE |
STRING |
表的类型。对于表,该值为 BASE TABLE ;对于视图,其值为 VIEW 。 |
PARENT_TABLE_NAME |
STRING |
如果此表是交错表,则为父表的名称,否则为 NULL 。 |
ON_DELETE_ACTION |
STRING |
对于交错表,设置为 CASCADE 或 NO ACTION ,否则设置为 NULL 。如需了解详情,请参阅 TABLE 语句。 |
SPANNER_STATE |
STRING |
如果涉及批量操作,则表可能会在创建过程中经历多种状态。例如,使用需要回填其索引的外键创建表时。可能的状态包括:
|
COLUMNS
此表列出了表中的列。
列名 | 类型 | 说明 |
---|---|---|
TABLE_CATALOG |
STRING |
目录的名称。始终为空字符串。 |
TABLE_SCHEMA |
STRING |
架构的名称。如果未命名,则为空字符串。 |
TABLE_NAME |
STRING |
表的名称。 |
COLUMN_NAME |
STRING |
列的名称。 |
ORDINAL_POSITION |
INT64 |
表中列的序号位置,从 1 开始。 |
COLUMN_DEFAULT |
STRING |
列默认值的 SQL 表达式的字符串。如果列没有默认值,则返回
注意:在 2022 年 3 月之前, |
DATA_TYPE |
STRING |
包含在内,用于满足 SQL 标准。始终为 NULL 。 |
IS_NULLABLE |
STRING |
指明列是否可以为 Null 的字符串。根据 SQL 标准,字符串可以是 YES 或 NO ,而不是布尔值。 |
SPANNER_TYPE |
STRING |
列的数据类型。 |
IS_GENERATED |
STRING |
指明是否生成列的字符串。对于生成的列,字符串为 ALWAYS ;对于非生成的列,该字符串为 NEVER 。 |
GENERATION_EXPRESSION |
STRING |
表示所生成列的 SQL 表达式的字符串。如果该列不是生成的列,则为 NULL 。 |
IS_STORED |
STRING |
指明是否存储生成的列的字符串。对于生成的列,字符串始终为 YES ;对于非生成的列,该字符串始终为 NULL 。 |
SPANNER_STATE |
STRING |
列的当前状态。向现有表添加的新的生成的已存储列可能需要经过多个用户可观察状态才能充分利用。可能的
|
COLUMN_PRIVILEGES
下表列出了在列级别向数据库角色授予的所有权限。
列名 | 类型 | 说明 |
---|---|---|
TABLE_CATALOG |
STRING |
特权列的目录名称。始终为空字符串。 |
TABLE_SCHEMA |
STRING |
特权列的名称。始终为空字符串。 |
TABLE_NAME |
STRING |
包含特权列的表的名称。 |
COLUMN_NAME |
STRING |
特权列的名称。 |
PRIVILEGE_TYPE |
STRING |
SELECT 、INSERT 、UPDATE |
GRANTEE |
STRING |
此权限所授予的数据库角色的名称。 |
TABLE_PRIVILEGES
下表列出了在表级授予的数据库角色的所有权限。
列名 | 类型 | 说明 |
---|---|---|
TABLE_CATALOG |
STRING |
特权表的名称。始终为空字符串。 |
TABLE_SCHEMA |
STRING |
特权表的架构名称。始终为空字符串。 |
TABLE_NAME |
STRING |
特权表的名称。 |
PRIVILEGE_TYPE |
STRING |
SELECT 、INSERT 、UPDATE 、DELETE |
GRANTEE |
STRING |
此权限所授予的数据库角色的名称。 |
TABLE_CONSTRAINTS
此表为数据库中的表定义的每个限制条件都包含了一行。
列名 | 类型 | 说明 |
---|---|---|
CONSTRAINT_CATALOG |
STRING |
始终为空字符串。 |
CONSTRAINT_SCHEMA |
STRING |
限制条件的架构名称。如果未命名,则为空字符串。 |
CONSTRAINT_NAME |
STRING |
限制条件的名称。 |
TABLE_CATALOG |
STRING |
受限表的目录名称。始终为空字符串。 |
TABLE_SCHEMA |
STRING |
受限表的架构名称。如果未命名,则为空字符串。 |
TABLE_NAME |
STRING |
受限表的名称。 |
CONSTRAINT_TYPE |
STRING |
限制条件的类型。可能的
|
IS_DEFERRABLE |
STRING |
始终为 NO 。 |
INITIALLY_DEFERRED |
STRING |
始终为 NO 。 |
ENFORCED |
STRING |
始终为 YES 。 |
CONSTRAINT_TABLE_USAGE
此表列出了定义限制条件或限制条件使用的表。包括用于定义 PRIMARY KEY
和 UNIQUE
限制条件的表。此外,还包括引用的 FOREIGN KEY
定义的表。
列名 | 类型 | 说明 |
---|---|---|
TABLE_CATALOG |
STRING |
受限表的目录名称。始终为空字符串。 |
TABLE_SCHEMA |
STRING |
受限表的架构名称。如果未命名,则为空字符串。 |
TABLE_NAME |
STRING |
受限表的名称。 |
CONSTRAINT_CATALOG |
STRING |
限制条件的目录名称。始终为空字符串。 |
CONSTRAINT_SCHEMA |
STRING |
限制条件的架构名称。如果未命名,则为空字符串。 |
CONSTRAINT_NAME |
STRING |
限制条件的名称。 |
REFERENTIAL_CONSTRAINTS
此表包含一行有关每个 FOREIGN KEY
限制条件的信息。
列名 | 类型 | 说明 |
---|---|---|
CONSTRAINT_CATALOG |
STRING |
外键的目录名称。始终为空字符串。 |
CONSTRAINT_SCHEMA |
STRING |
外键的架构名称。如果未命名,则为空字符串。 |
CONSTRAINT_NAME |
STRING |
外键的名称。 |
UNIQUE_CONSTRAINT_CATALOG |
STRING |
主键或 UNIQUE 主目录的目录名称限制了 FOREIGN KEY 引用。始终为空字符串。 |
UNIQUE_CONSTRAINT_SCHEMA |
STRING |
主键或唯一限制条件的架构名称引用了 FOREIGN KEY。如果未命名,则为空字符串。 |
UNIQUE_CONSTRAINT_NAME |
STRING |
外键引用的主键或唯一限制条件的名称。 |
MATCH_OPTION |
STRING |
始终为 SIMPLE 。 |
UPDATE_RULE |
STRING |
始终为 NO ACTION 。 |
DELETE_RULE |
STRING |
始终为 NO ACTION 。 |
SPANNER_STATE |
STRING |
外键的当前状态。Spanner 仅在开始创建和回填外键的后备索引后才会开始强制执行限制条件。索引准备就绪后,Spanner 会在验证现有数据时开始对新事务实施限制。可能的值和它们所代表的状态如下:
|
CHECK_CONSTRAINTS
information_schema.CHECK_CONSTRAINTS
表包含关于 CHECK
或 NOT NULL
关键字定义的各个 CHECK
限制条件的一行。
列名 | 类型 | 说明 |
---|---|---|
CONSTRAINT_CATALOG |
STRING |
限制条件的目录名称。此列从来不会为 null,但始终为空字符串。 |
CONSTRAINT_SCHEMA |
STRING |
限制条件的架构名称。如果未命名,则为空字符串。 |
CONSTRAINT_NAME |
STRING |
限制条件的名称。此列从来不会为 null。如果未在架构定义中明确指定,将分配系统定义的名称。 |
CHECK_CLAUSE |
STRING |
CHECK 限制条件的表达式。此列从来不会为 null。 |
SPANNER_STATE |
STRING |
CHECK 限制条件的当前状态。此列从来不会为 null。 可能的状态如下:
|
KEY_COLUMN_USAGE
该表包含一行,关于 TABLE_CONSTRAINTS
中受 PRIMARY KEY
、FOREIGN KEY
或 UNIQUE
约束条件约束为键的表中的每一列。这些是定义约束的表的列。
列名 | 类型 | 说明 |
---|---|---|
CONSTRAINT_CATALOG |
STRING |
限制条件的目录名称。始终为空字符串。 |
CONSTRAINT_SCHEMA |
STRING |
限制条件的架构名称。此列从来不会为 null。空字符串(如果未命名)。 |
CONSTRAINT_NAME |
STRING |
限制条件的名称。 |
TABLE_CATALOG |
STRING |
受限列的目录名称。始终为空字符串。 |
TABLE_SCHEMA |
STRING |
受限列的架构名称。此列从来不会为 null。 如果未命名,则为空字符串。 |
TABLE_NAME |
STRING |
受限列的表的名称。 |
COLUMN_NAME |
STRING |
列的名称。 |
ORDINAL_POSITION |
INT64 |
列在约束条件键中的序数位置,从值为 1 开始。 |
POSITION_IN_UNIQUE_CONSTRAINT |
INT64 |
对于 FOREIGN KEY ,唯一约束条件中列的序号位置,从值 1 开始。对于其他限制类型,此列为 null。 |
CONSTRAINT_COLUMN_USAGE
此表包含一行有关限制条件使用的每一列的信息。包括 PRIMARY KEY
和 UNIQUE
列,以及引用的 FOREIGN KEY
约束列。
列名 | 类型 | 说明 |
---|---|---|
TABLE_CATALOG |
STRING |
列表的目录名称。始终为空字符串。 |
TABLE_SCHEMA |
STRING |
列表的架构名称。此列从来不会为 null。如果未命名,则为空字符串。 |
TABLE_NAME |
STRING |
列的表名称。 |
COLUMN_NAME |
STRING |
限制条件使用的列的名称。 |
CONSTRAINT_CATALOG |
STRING |
限制条件的目录名称。始终为空字符串。 |
CONSTRAINT_SCHEMA |
STRING |
限制条件的架构名称。如果未命名,则为空字符串。 |
CONSTRAINT_NAME |
STRING |
限制条件的名称。 |
INDEXES
此表列出了架构中的索引。
列名 | 类型 | 说明 |
---|---|---|
TABLE_CATALOG |
STRING |
目录的名称。始终为空字符串。 |
TABLE_SCHEMA |
STRING |
架构的名称。如果未命名,则为空字符串。 |
TABLE_NAME |
STRING |
表的名称。 |
INDEX_NAME |
STRING |
索引的名称。具有 PRIMARY KEY 规范的表具有使用名称 PRIMARY_KEY 生成的伪索引条目,这可以确定主键的字段。 |
INDEX_TYPE |
STRING |
索引的类型。类型是 INDEX 或 PRIMARY_KEY 。 |
PARENT_TABLE_NAME |
STRING |
二级索引可以在父表中交错,如创建二级索引中所述。此列存储该父表的名称,如果索引未交错,则保留 NULL 。 |
IS_UNIQUE |
BOOL |
索引键是否必须是唯一的。 |
IS_NULL_FILTERED |
BOOL |
索引是否包含值为 NULL 的条目。 |
INDEX_STATE |
STRING |
索引的当前状态。可能的值和它们所代表的状态如下:
|
SPANNER_IS_MANAGED |
BOOL |
如果索引由 Spanner 管理,则返回 TRUE ;否则,返回 FALSE 。外键的辅助后备索引由 Spanner 管理。 |
INDEX_COLUMNS
此表列出了索引中的列。
列名 | 类型 | 说明 |
---|---|---|
TABLE_CATALOG |
STRING |
目录的名称。始终为空字符串。 |
TABLE_SCHEMA |
STRING |
架构的名称。如果未命名,则为空字符串。 |
TABLE_NAME |
STRING |
表的名称。 |
INDEX_NAME |
STRING |
索引的名称。 |
COLUMN_NAME |
STRING |
列的名称。 |
ORDINAL_POSITION |
INT64 |
索引(或主键)中列的序号位置,从值 1 开始。对于非键列(例如,索引的 STORING 子句中指定的列),此值为 NULL 。 |
COLUMN_ORDERING |
STRING |
列的排序。对于键列,值为 ASC 或 DESC ;对于非键列(例如,索引的 STORING 子句中指定的列),值为 NULL 。 |
IS_NULLABLE |
STRING |
指明列是否可以为 Null 的字符串。根据 SQL 标准,字符串可以是 YES 或 NO ,但不能是布尔值。 |
SPANNER_TYPE |
STRING |
列的数据类型。 |
COLUMN_OPTIONS
此表列出了表中的列选项。
列名 | 类型 | 说明 |
---|---|---|
TABLE_CATALOG |
STRING |
目录的名称。始终为空字符串。 |
TABLE_SCHEMA |
STRING |
架构的名称。默认架构的名称为空,其他架构(例如,INFORMATION_SCHEMA 本身)的名称为非空。
此列从来不会为 null。 |
TABLE_NAME |
STRING |
表的名称。 |
COLUMN_NAME |
STRING |
列的名称。 |
OPTION_NAME |
STRING |
唯一标识选项的 SQL 标识符。此标识符是 DDL 中 OPTIONS 子句的键。 |
OPTION_TYPE |
STRING |
表示此选项值的类型的数据类型名称。 |
OPTION_VALUE |
STRING |
描述此选项值的 SQL 字面量。此列的值必须作为查询的一部分进行分析。解析该值所得到的表达式必须可强制转换为 OPTION_TYPE 。此列从来不会为 null。 |
SPANNER_STATISTICS
下表列出了可用的查询优化器统计信息软件包。
列名 | 类型 | 说明 |
---|---|---|
CATALOG_NAME |
STRING |
目录的名称。始终为空字符串。 |
SCHEMA_NAME |
STRING |
架构的名称。默认架构的名称为空,其他架构(例如,INFORMATION_SCHEMA 本身)的名称为非空。
此列从来不会为 null。 |
PACKAGE_NAME |
STRING |
统计信息软件包的名称。 |
ALLOW_GC |
BOOL |
如果统计信息软件包豁免垃圾回收,则返回 FALSE ;否则返回 TRUE 。此属性必须设置为 FALSE ,才能在提示中或通过客户端 API 引用统计信息软件包。
|
VIEWS
此表列出了架构中的视图的相关信息。
列名 | 类型 | 说明 |
---|---|---|
TABLE_CATALOG |
STRING |
目录的名称。始终为空字符串。 |
TABLE_SCHEMA |
STRING |
架构的名称。如果未命名,则为空字符串。 |
TABLE_NAME |
STRING |
视图的名称。 |
VIEW_DEFINITION |
STRING |
定义视图的查询的 SQL 文本。 |
ROLES
下表列出了用于精细访问权限控制的数据库角色的信息。数据库角色是权限的集合。
列名 | 类型 | 说明 |
---|---|---|
ROLE_NAME |
STRING |
数据库角色的名称。 |
IS_SYSTEM |
BOOL |
如果数据库角色为系统角色,则为 TRUE ;否则为 FALSE 。 |
ROLE_GRANTEES
下表列出了架构中数据库角色授予者的相关信息。role_name
是精细访问权限控制的数据库角色,grantee
是具有成员 role_name
角色的角色。
由于所有数据库角色都是公共角色的成员,因此结果会忽略公共角色中隐式成员的记录。
列名 | 类型 | 说明 |
---|---|---|
ROLE_NAME |
STRING |
授予此成员资格的数据库角色的名称。 |
GRANTEE |
STRING |
授予此成员资格的数据库角色的名称。 |
CHANGE_STREAMS
下表列出了数据库的所有变更流,并记录了哪些数据流跟踪整个数据库而不是特定表或列。
列名 | 类型 | 说明 |
---|---|---|
CHANGE_STREAM_CATALOG |
STRING |
变更流目录的名称。始终为空字符串。 |
CHANGE_STREAM_SCHEMA |
STRING |
此变更流架构的名称。始终为空字符串。 |
CHANGE_STREAM_NAME |
STRING |
变更流的名称。 |
ALL |
BOOL |
如果此变更流跟踪整个数据库,则为 TRUE 。如果此变更流跟踪的是特定表或列,则为 FALSE 。 |
CHANGE_STREAM_TABLES
此表包含数据库的表及其变更流之间的关系。每行一个数据库表和一个变更流。
CHANGE_STREAM_TABLES
中的数据不包括跟踪整个数据库的表和变更流之间的隐式关系。
列名 | 类型 | 说明 |
---|---|---|
CHANGE_STREAM_CATALOG |
STRING |
变更流目录的名称。始终为空字符串。 |
CHANGE_STREAM_SCHEMA |
STRING |
变更流架构的名称。始终为空字符串。 |
CHANGE_STREAM_NAME |
STRING |
此行引用的更改流的名称。 |
TABLE_CATALOG |
STRING |
表的目录名称。始终为空字符串。 |
TABLE_SCHEMA |
STRING |
表架构的名称。始终为空字符串。 |
TABLE_NAME |
STRING |
此行所引用的表的名称。 |
ALL_COLUMNS |
BOOL |
如果该行的变更流跟踪的是此行引用的完整表格,则返回 TRUE 。否则,FALSE 。 |
CHANGE_STREAM_COLUMNS
此表包含数据库的列与其变更流之间的关系。每行一个更改流和一个数据库列。
CHANGE_STREAM_COLUMNS
的数据不包括列以及跟踪这些列和变更表的变更流之间的隐式关系。
列名 | 类型 | 说明 |
---|---|---|
CHANGE_STREAM_CATALOG |
STRING |
变更流目录的名称。始终为空字符串。 |
CHANGE_STREAM_SCHEMA |
STRING |
变更流架构的名称。始终为空字符串。 |
CHANGE_STREAM_NAME |
STRING |
变更流的名称。 |
TABLE_CATALOG |
STRING |
表的目录名称。始终为空字符串。 |
TABLE_SCHEMA |
STRING |
表架构的名称。始终为空字符串。 |
TABLE_NAME |
STRING |
此行所引用的表的名称。 |
COLUMN_NAME |
STRING |
此行引用的列的名称。 |
CHANGE_STREAM_OPTIONS
下表包含变更流的配置选项。
列名 | 类型 | 说明 |
---|---|---|
CHANGE_STREAM_CATALOG |
STRING |
变更流目录的名称。始终为空字符串。 |
CHANGE_STREAM_SCHEMA |
STRING |
变更流架构的名称。始终为空字符串。 |
CHANGE_STREAM_NAME |
STRING |
变更流的名称。 |
OPTION_NAME |
STRING |
变更流选项的名称。 |
OPTION_TYPE |
STRING |
变更流选项的数据类型。 |
OPTION_VALUE |
STRING |
变更流选项值。 |
示例
返回有关用户架构中每个表的信息:
SELECT
t.table_name,
t.parent_table_name
FROM
information_schema.tables AS t
WHERE
t.table_catalog = ''
AND
t.table_schema = ''
ORDER BY
t.table_catalog,
t.table_schema,
t.table_name
返回 INFORMATION_SCHEMA 中所有表的名称:
SELECT
t.table_name
FROM
information_schema.tables AS t
WHERE
t.table_schema = "SPANNER_SYS"
返回有关用户表 MyTable
中的列的信息:
SELECT
t.column_name,
t.spanner_type,
t.is_nullable
FROM
information_schema.columns AS t
WHERE
t.table_catalog = ''
AND
t.table_schema = ''
AND
t.table_name = 'MyTable'
ORDER BY
t.table_catalog,
t.table_schema,
t.table_name,
t.ordinal_position
返回有关数据库的默认主要区域的信息。如果未设置默认主要区域,则返回空值:
SELECT
s.option_name,
s.option_value
FROM
information_schema.database_options s
WHERE
s.option_name = 'default_leader'
返回有关用户架构中每个索引的信息:
SELECT
t.table_name,
t.index_name,
t.parent_table_name
FROM
information_schema.indexes AS t
WHERE
t.table_catalog = ''
AND
t.table_schema = ''
AND
t.index_type != 'PRIMARY_KEY'
ORDER BY
t.table_catalog,
t.table_schema,
t.table_name,
t.index_name
返回使用默认值以外的选项的所有列:
SELECT
t.table_name,
t.column_name,
t.option_type,
t.option_value,
t.option_name
FROM
information_schema.column_options AS t
WHERE
t.table_catalog = ''
AND
t.table_schema = ''
返回当前与优化器相关的数据库选项:
SELECT
s.option_name,
s.option_value
FROM
information_schema.database_options s
WHERE
s.schema_name=''
AND s.option_name IN ('optimizer_version',
'optimizer_statistics_package')
返回所有可用的统计信息包:
SELECT
*
FROM
information_schema.spanner_statistics;
后续步骤
- 了解可用的内省工具以帮助您调查数据库问题。