跳到主要内容

信息模式

information_schema 中的视图是 SQL 标准视图,用于描述数据库中的目录条目。这些视图可以通过筛选来获取特定列或表的信息。 Goose 的实现基于 PostgreSQL 的信息模式

character_sets: 字符集

描述类型示例
character_set_catalog当前尚未实现,始终为 NULLVARCHARNULL
character_set_schema当前尚未实现,始终为 NULLVARCHARNULL
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 开始计数)。INTEGER5
column_default列的默认表达式。VARCHAR1.99
is_nullable若列可能可空则为 YES,若已知不可空则为 NOVARCHAR'YES'
data_type列的数据类型。VARCHAR'DECIMAL(18, 2)'
character_maximum_lengthdata_type 表示字符或位串类型,则为声明的最大长度;对于其他数据类型或未声明最大长度时为 NULLINTEGER255
character_octet_lengthdata_type 表示字符类型,则为值的最大可能八位组(字节)长度;其他数据类型为 NULL。最大八位组长度取决于声明的字符最大长度(见上文)和字符编码。INTEGER1073741824
numeric_precisiondata_type 表示数值类型,此列包含该列类型的(声明或隐式)精度。精度表示有效数字位数。其他数据类型此列为 NULLINTEGER18
numeric_scaledata_type 表示数值类型,此列包含该列类型的(声明或隐式)小数位数。精度表示有效数字位数。其他数据类型此列为 NULLINTEGER2
datetime_precisiondata_type 表示日期、时间、时间戳或间隔类型,此列包含该列类型的(声明或隐式)秒小数精度,即秒值小数点后保留的十进制位数。Goose 当前不支持秒的小数部分。其他数据类型此列为 NULLINTEGER0

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 开始计数)。INTEGER1
position_in_unique_constraint对于外键约束,为被引用列在其唯一约束中的序号位置(从 1 开始计数);否则为 NULLINTEGER1

referential_constraints: 参照约束

描述类型示例
constraint_catalog包含该约束的数据库名称(始终为当前数据库)。VARCHAR'my_db'
constraint_schema包含该约束的模式名称。VARCHARmain
constraint_name约束名称。VARCHARexam_id_students_id_fkey
unique_constraint_catalog包含外键约束所引用唯一约束或主键约束的数据库名称。VARCHAR'my_db'
unique_constraint_schema包含外键约束所引用唯一约束或主键约束的模式名称。VARCHAR'main'
unique_constraint_name外键约束所引用的唯一约束或主键约束名称。VARCHAR'students_id_pkey'
match_option外键约束的匹配选项。始终为 NONEVARCHARNONE
update_rule外键约束的更新规则。始终为 NO ACTIONVARCHARNO ACTION
delete_rule外键约束的删除规则。始终为 NO ACTIONVARCHARNO ACTION

schemata: 数据库、目录与模式

顶层目录视图是 information_schema.schemata。它列出数据库中存在的目录和模式,结构如下:

描述类型示例
catalog_name该模式所属数据库的名称。VARCHAR'my_db'
schema_name模式名称。VARCHAR'main'
schema_owner模式所有者名称。尚未实现。VARCHAR'goose'
default_character_set_catalog适用于 Goose 中不可用的功能。VARCHARNULL
default_character_set_schema适用于 Goose 中不可用的功能。VARCHARNULL
default_character_set_name适用于 Goose 中不可用的功能。VARCHARNULL
sql_path适用于 Goose 中不可用的功能。VARCHARNULL

tables: 表与视图

用于描述表和视图目录信息的视图是 information_schema.tables。它列出数据库中存在的表,结构如下:

描述类型示例
table_catalog表或视图所属的目录。VARCHAR'my_db'
table_schema表或视图所属的模式。VARCHAR'main'
table_name表或视图名称。VARCHAR'widgets'
table_type表类型。取值之一:BASE TABLELOCAL TEMPORARYVIEWVARCHAR'BASE TABLE'
self_referencing_column_name适用于 Goose 中不可用的功能。VARCHARNULL
reference_generation适用于 Goose 中不可用的功能。VARCHARNULL
user_defined_type_catalog如果该表是类型化表,则为包含其底层数据类型的数据库名称(始终为当前数据库);否则为 NULL。当前未实现。VARCHARNULL
user_defined_type_schema如果该表是类型化表,则为包含其底层数据类型的模式名称;否则为 NULL。当前未实现。VARCHARNULL
user_defined_type_name如果该表是类型化表,则为其底层数据类型名称;否则为 NULL。当前未实现。VARCHARNULL
is_insertable_into若表可插入则为 YES,否则为 NO(基表始终可插入,视图不一定)。VARCHAR'YES'
is_typed若表是类型化表则为 YES,否则为 NOVARCHAR'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约束类型:CHECKFOREIGN KEYPRIMARY KEYUNIQUEVARCHAR'FOREIGN KEY'
is_deferrable若约束可延迟则为 YES,否则为 NOVARCHAR'NO'
initially_deferred若约束可延迟且初始为延迟则为 YES,否则为 NOVARCHAR'NO'
enforced始终为 YESVARCHAR'YES'
nulls_distinct若约束为唯一约束:当将 NULL 视为彼此不同则为 YES,视为不同时为 NO;其他约束类型为 NULLVARCHAR'YES'

目录函数

还提供了若干函数,用于查看数据库中已配置目录和模式的详细信息。

函数描述示例结果
current_catalog()返回当前活动目录名称。默认是 memory。current_catalog()'memory'
current_schema()返回当前活动模式名称。默认是 main。current_schema()'main'
current_schemas(boolean)返回模式列表。传入 true 可包含隐式模式。current_schemas(true)['temp', 'main', 'pg_catalog']