information_schema 中的视图是 SQL 标准视图,用于描述数据库中的目录条目。这些视图可以通过筛选来获取特定列或表的信息。
Goose 的实现基于 PostgreSQL 的信息模式。
character_sets: 字符集
| 列 | 描述 | 类型 | 示例 |
|---|
character_set_catalog | 当前尚未实现,始终为 NULL。 | VARCHAR | NULL |
character_set_schema | 当前尚未实现,始终为 NULL。 | VARCHAR | NULL |
character_set_name | 字符集名称,当前实现为显示数据库编码名称。 | VARCHAR | 'UTF8' |
character_repertoire | 字符集范围:当编码为 UTF8 时显示 UCS,否则显示编码名称。 | VARCHAR | 'UCS' |
form_of_use | 字符编码形式,与数据库编码相同。 | VARCHAR | 'UTF8' |
default_collate_catalog | 包含默认排序规则的数据库名称(始终为当前数据库)。 | VARCHAR | 'my_db' |
default_collate_schema | 包含默认排序规则的模式名称。 | VARCHAR | 'pg_catalog' |
default_collate_name | 默认排序规则名称。 | VARCHAR | 'ucs_basic' |
columns: 列
用于描述列目录信息的视图是 information_schema.columns。它列出数据库中存在的列,结构如下:
| 列 | 描述 | 类型 | 示例 |
|---|
table_catalog | 包含该表的数据库名称(始终为当前数据库)。 | VARCHAR | 'my_db' |
table_schema | 包含该表的模式名称。 | VARCHAR | 'main' |
table_name | 表名称。 | VARCHAR | 'widgets' |
column_name | 列名称。 | VARCHAR | 'price' |
ordinal_position | 列在表中的序号位置(从 1 开始计数)。 | INTEGER | 5 |
column_default | 列的默认表达式。 | VARCHAR | 1.99 |
is_nullable | 若列可能可空则为 YES,若已知不可空则为 NO。 | VARCHAR | 'YES' |
data_type | 列的数据类型。 | VARCHAR | 'DECIMAL(18, 2)' |
character_maximum_length | 若 data_type 表示字符或位串类型,则为声明的最大长度;对于其他数据类型或未声明最大长度时为 NULL。 | INTEGER | 255 |
character_octet_length | 若 data_type 表示字符类型,则为值的最大可能八位组(字节)长度;其他数据类型为 NULL。最大八位组长度取决于声明的字符最大长度(见上文)和字符编码。 | INTEGER | 1073741824 |
numeric_precision | 若 data_type 表示数值类型,此列包含该列类型的(声明或隐式)精度。精度表示有效数字位数。其他数据类型此列为 NULL。 | INTEGER | 18 |
numeric_scale | 若 data_type 表示数值类型,此列包含该列类型的(声明或隐式)小数位数。精度表示有效数字位数。其他数据类型此列为 NULL。 | INTEGER | 2 |
datetime_precision | 若 data_type 表示日期、时间、时间戳或间隔类型,此列包含该列类型的(声明或隐式)秒小数精度,即秒值小数点后保留的十进制位数。Goose 当前不支持秒的小数部分。其他数据类型此列为 NULL。 | INTEGER | 0 |
constraint_column_usage: 约束列使用情况
该视图描述当前数据库中被某些约束使用的所有列。对于检查约束,该视图标识检查表达式中使用的列。对于非空约束,该视图标识定义该约束的列。对于外键约束,该视图标识外键引用的列。对于唯一约束或主键约束,该视图标识受约束的列。
| 列 | 描述 | 类型 | 示例 |
|---|
table_catalog | 包含该列所在表的数据库名称,该列被某些约束使用(始终为当前数据库) | VARCHAR | 'my_db' |
table_schema | 包含该列所在表的模式名称,该列被某些约束使用 | VARCHAR | 'main' |
table_name | 包含该列的表名称,该列被某些约束使用 | VARCHAR | 'widgets' |
column_name | 被某些约束使用的列名称 | VARCHAR | 'price' |
constraint_catalog | 包含该约束的数据库名称(始终为当前数据库) | VARCHAR | 'my_db' |
constraint_schema | 包含该约束的模式名称 | VARCHAR | 'main' |
constraint_name | 约束名称 | VARCHAR | 'exam_id_students_id_fkey' |
key_column_usage: 键列使用情况
| 列 | 描述 | 类型 | 示例 |
|---|
constraint_catalog | 包含该约束的数据库名称(始终为当前数据库)。 | VARCHAR | 'my_db' |
constraint_schema | 包含该约束的模式名称。 | VARCHAR | 'main' |
constraint_name | 约束名称。 | VARCHAR | 'exams_exam_id_fkey' |
table_catalog | 包含受该约束限制列所在表的数据库名称(始终为当前数据库)。 | VARCHAR | 'my_db' |
table_schema | 包含受该约束限制列所在表的模式名称。 | VARCHAR | 'main' |
table_name | 包含受该约束限制列的表名称。 | VARCHAR | 'exams' |
column_name | 受该约束限制的列名称。 | VARCHAR | 'exam_id' |
ordinal_position | 列在约束键中的序号位置(从 1 开始计数)。 | INTEGER | 1 |
position_in_unique_constraint | 对于外键约束,为被引用列在其唯一约束中的序号位置(从 1 开始计数);否则为 NULL。 | INTEGER | 1 |
referential_constraints: 参照约束
| 列 | 描述 | 类型 | 示例 |
|---|
constraint_catalog | 包含该约束的数据库名称(始终为当前数据库)。 | VARCHAR | 'my_db' |
constraint_schema | 包含该约束的模式名称。 | VARCHAR | main |
constraint_name | 约束名称。 | VARCHAR | exam_id_students_id_fkey |
unique_constraint_catalog | 包含外键约束所引用唯一约束或主键约束的数据库名称。 | VARCHAR | 'my_db' |
unique_constraint_schema | 包含外键约束所引用唯一约束或主键约束的模式名称。 | VARCHAR | 'main' |
unique_constraint_name | 外键约束所引用的唯一约束或主键约束名称。 | VARCHAR | 'students_id_pkey' |
match_option | 外键约束的匹配选项。始终为 NONE。 | VARCHAR | NONE |
update_rule | 外键约束的更新规则。始终为 NO ACTION。 | VARCHAR | NO ACTION |
delete_rule | 外键约束的删除规则。始终为 NO ACTION。 | VARCHAR | NO ACTION |
schemata: 数据库、目录与模式
顶层目录视图是 information_schema.schemata。它列出数据库中存在的目录和模式,结构如下:
| 列 | 描述 | 类型 | 示例 |
|---|
catalog_name | 该模式所属数据库的名称。 | VARCHAR | 'my_db' |
schema_name | 模式名称。 | VARCHAR | 'main' |
schema_owner | 模式所有者名称。尚未实现。 | VARCHAR | 'goose' |
default_character_set_catalog | 适用于 Goose 中不可用的功能。 | VARCHAR | NULL |
default_character_set_schema | 适用于 Goose 中不可用的功能。 | VARCHAR | NULL |
default_character_set_name | 适用于 Goose 中不可用的功能。 | VARCHAR | NULL |
sql_path | 适用于 Goose 中不可用的功能。 | VARCHAR | NULL |
tables: 表与视图
用于描述表和视图目录信息的视图是 information_schema.tables。它列出数据库中存在的表,结构如下:
| 列 | 描述 | 类型 | 示例 |
|---|
table_catalog | 表或视图所属的目录。 | VARCHAR | 'my_db' |
table_schema | 表或视图所属的模式。 | VARCHAR | 'main' |
table_name | 表或视图名称。 | VARCHAR | 'widgets' |
table_type | 表类型。取值之一:BASE TABLE、LOCAL TEMPORARY、VIEW。 | VARCHAR | 'BASE TABLE' |
self_referencing_column_name | 适用于 Goose 中不可用的功能。 | VARCHAR | NULL |
reference_generation | 适用于 Goose 中不可用的功能。 | VARCHAR | NULL |
user_defined_type_catalog | 如果该表是类型化表,则为包含其底层数据类型的数据库名称(始终为当前数据库);否则为 NULL。当前未实现。 | VARCHAR | NULL |
user_defined_type_schema | 如果该表是类型化表,则为包含其底层数据类型的模式名称;否则为 NULL。当前未实现。 | VARCHAR | NULL |
user_defined_type_name | 如果该表是类型化表,则为其底层数据类型名称;否则为 NULL。当前未实现。 | VARCHAR | NULL |
is_insertable_into | 若表可插入则为 YES,否则为 NO(基表始终可插入,视图不一定)。 | VARCHAR | 'YES' |
is_typed | 若表是类型化表则为 YES,否则为 NO。 | VARCHAR | 'NO' |
commit_action | 尚未实现。 | VARCHAR | 'NO' |
table_constraints: 表约束
| 列 | 描述 | 类型 | 示例 |
|---|
constraint_catalog | 包含该约束的数据库名称(始终为当前数据库)。 | VARCHAR | 'my_db' |
constraint_schema | 包含该约束的模式名称。 | VARCHAR | 'main' |
constraint_name | 约束名称。 | VARCHAR | 'exams_exam_id_fkey' |
table_catalog | 包含该表的数据库名称(始终为当前数据库)。 | VARCHAR | 'my_db' |
table_schema | 包含该表的模式名称。 | VARCHAR | 'main' |
table_name | 表名称。 | VARCHAR | 'exams' |
constraint_type | 约束类型:CHECK、FOREIGN KEY、PRIMARY KEY 或 UNIQUE。 | VARCHAR | 'FOREIGN KEY' |
is_deferrable | 若约束可延迟则为 YES,否则为 NO。 | VARCHAR | 'NO' |
initially_deferred | 若约束可延迟且初始为延迟则为 YES,否则为 NO。 | VARCHAR | 'NO' |
enforced | 始终为 YES。 | VARCHAR | 'YES' |
nulls_distinct | 若约束为唯一约束:当将 NULL 视为彼此不同则为 YES,视为不同时为 NO;其他约束类型为 NULL。 | VARCHAR | 'YES' |
目录函数
还提供了若干函数,用于查看数据库中已配置目录和模式的详细信息。
| 函数 | 描述 | 示例 | 结果 |
|---|
current_catalog() | 返回当前活动目录名称。默认是 memory。 | current_catalog() | 'memory' |
current_schema() | 返回当前活动模式名称。默认是 main。 | current_schema() | 'main' |
current_schemas(boolean) | 返回模式列表。传入 true 可包含隐式模式。 | current_schemas(true) | ['temp', 'main', 'pg_catalog'] |