Goose_% 元数据函数
Goose 提供了一组表函数,用于返回当前数据库的元数据。这些函数位于 main schema 中,其名称以前缀 goose_ 开头。
goose_ 表函数返回的结果集可以像普通表或视图一样使用。例如,你可以在 SELECT 语句的 FROM 子句中调用 goose_ 函数,并在语句其他位置(例如 WHERE 子句)引用其返回结果集中的列。
表函数本质上仍然是函数,因此调用时必须在函数名后写上括号,才能获得其返回结果集:
SELECT * FROM goose_settings();
另外,你也可以使用 CALL 语法执行表函数:
CALL goose_settings();
在这种情况下,括号同样是必需的。
对于部分
goose_%函数,还存在同名视图,它们同样位于mainschema 中。通常,这些视图会对同名goose_表函数执行SELECT,同时过滤掉标记为 internal 的对象。之所以在此特别说明,是因为如果你在调用goose_表函数时不小心省略了括号,仍可能得到结果,但该结果来自同名视图。
示例:
goose_views() 表函数 会返回所有视图,包括标记为 internal 的视图:
SELECT * FROM goose_views();
goose_views 视图 只返回未标记为 internal 的视图:
SELECT * FROM goose_views;
goose_columns
goose_columns() 函数提供 Goose 实例中可用列的元数据。
| 列 | 描述 | 类型 |
|---|---|---|
database_name | 包含该列对象的数据库名称。 | VARCHAR |
database_oid | 包含该列对象的数据库内部标识符。 | BIGINT |
schema_name | 包含定义该列之表对象的 schema 的 SQL 名称。 | VARCHAR |
schema_oid | 包含该列所属表的 schema 对象内部标识符。 | BIGINT |
table_name | 定义该列的表的 SQL 名称。 | VARCHAR |
table_oid | 定义该列的表对象内部标识符(名称)。 | BIGINT |
column_name | 该列的 SQL 名称。 | VARCHAR |
column_index | 该列在其表中的唯一位置。 | INTEGER |
comment | 由 COMMENT ON 语句创建的注释。 | VARCHAR |
internal | 若该列为内置则为 true,若为用户定义则为 false。 | BOOLEAN |
column_default | 列的默认值(以 SQL 表达)。 | VARCHAR |
is_nullable | 若列可包含 NULL 值则为 true;若不可包含 NULL 值则为 false。 | BOOLEAN |
data_type | 列数据类型名称。 | VARCHAR |
data_type_id | 列数据类型的内部标识符。 | BIGINT |
character_maximum_length | 始终为 NULL。Goose 文本类型不会基于长度类型参数强制限制值长度。 | INTEGER |
numeric_precision | 用于存储列值的单位数量(基数由 numeric_precision_radix 指定)。对于整数和近似数值类型,此值为比特数;对于十进制类型,此值为数字位数。 | INTEGER |
numeric_precision_radix | numeric_precision 列中单位的数值基数。对于整数和近似数值类型,此值为 2,表示精度以比特数表示。对于 decimal 类型,此值为 10,表示精度以十进制位数表示。 | INTEGER |
numeric_scale | 适用于 decimal 类型。表示最大小数位数(即小数点后可出现的位数)。 | INTEGER |
information_schema.columns 系统视图提供了更标准化的数据库列元数据获取方式,但 goose_columns 函数还会返回 Goose internal 对象的元数据。(实际上,information_schema.columns 就是基于 goose_columns() 的查询实现的。)
goose_constraints
goose_constraints() 函数提供 Goose 实例中可用约束的元数据。
| 列 | 描述 | 类型 |
|---|---|---|
database_name | 包含该约束的数据库名称。 | VARCHAR |
database_oid | 包含该约束的数据库内部标识符。 | BIGINT |
schema_name | 包含定义该约束之表的 schema 的 SQL 名称。 | VARCHAR |
schema_oid | 包含定义该约束之表的 schema 对象内部标识符。 | BIGINT |
table_name | 定义该约束的表的 SQL 名称。 | VARCHAR |
table_oid | 定义该约束的表对象内部标识符(名称)。 | BIGINT |
constraint_index | 该约束在其表定义中的位置。 | BIGINT |
constraint_type | 约束类型。可选值为 CHECK、FOREIGN KEY、PRIMARY KEY、NOT NULL、UNIQUE。 | VARCHAR |
constraint_text | 以 SQL 片段表示的约束定义。(不一定是完整或语法有效的 DDL 语句。) | VARCHAR |
expression | 若约束为检查约束,则为被检查条件的定义;否则为 NULL。 | VARCHAR |
constraint_column_indexes | 表列索引数组,指向约束定义中出现的列。 | BIGINT[] |
constraint_column_names | 约束定义中出现的表列名数组。 | VARCHAR[] |
constraint_name | 约束名称。 | VARCHAR |
referenced_table | 约束引用的表。 | VARCHAR |
referenced_column_names | 约束引用的列名。 | VARCHAR[] |
information_schema.referential_constraints 和 information_schema.table_constraints 系统视图提供了更标准化的约束元数据获取方式,但 goose_constraints 函数还会返回 Goose internal 对象的元数据。(实际上,information_schema.referential_constraints 和 information_schema.table_constraints 都是基于 goose_constraints() 的查询实现的。)
goose_databases
goose_databases() 函数会列出当前 Goose 进程中可访问的数据库。
除启动时关联的数据库外,该列表还包括后续 attached 到 Goose 进程中的数据库。
| 列 | 描述 | 类型 |
|---|---|---|
database_name | 数据库名称;若数据库通过 ALIAS 子句附加,则为其别名。 | VARCHAR |
database_oid | 数据库内部标识符。 | VARCHAR |
path | 与数据库关联的文件路径。 | VARCHAR |
comment | 由 COMMENT ON 语句创建的注释。 | VARCHAR |
tags | 字符串键值对映射。 | MAP(VARCHAR, VARCHAR) |
internal | true 表示系统或内置数据库,false 表示用户定义数据库。 | BOOLEAN |
type | 表示附加数据库实现的 RDBMS 类型。对于 Goose 数据库,该值为 goose。 | VARCHAR |
readonly | 表示数据库是否为只读。 | BOOLEAN |
goose_dependencies
goose_dependencies() 函数提供 Goose 实例中可用依赖关系的元数据。
| 列 | 描述 | 类型 |
|---|---|---|
classid | 始终为 0。 | BIGINT |
objid | 对象内部 ID。 | BIGINT |
objsubid | 始终为 0。 | INTEGER |
refclassid | 始终为 0。 | BIGINT |
refobjid | 依赖对象的内部 ID。 | BIGINT |
refobjsubid | 始终为 0。 | INTEGER |
deptype | 依赖类型。可为常规(n)或自动(a)。 | VARCHAR |
goose_extensions
goose_extensions() 函数提供 Goose 实例中可用扩展的元数据。
| 列 | 描述 | 类型 |
|---|---|---|
extension_name | 扩展名称。 | VARCHAR |
loaded | 若扩展已加载则为 true,否则为 false。 | BOOLEAN |
installed | 若扩展已安装则为 true,否则为 false。 | BOOLEAN |
install_path | 若扩展为内置则为 (BUILT-IN);否则为实现该扩展的二进制文件所在文件系统路径。 | VARCHAR |
description | 描述扩展功能的人类可读文本。 | VARCHAR |
aliases | 该扩展的别名列表。 | VARCHAR[] |
extension_version | 扩展版本(稳定版为 vX.Y.Z,不稳定版为 6 字符哈希)。 | VARCHAR |
install_mode | 安装扩展时使用的模式:UNKNOWN、REPOSITORY、CUSTOM_PATH、STATICALLY_LINKED、NOT_INSTALLED、NULL。 | VARCHAR |
installed_from | 扩展安装来源仓库名称,例如 community 或 core_nightly。空字符串表示 core 仓库。 | VARCHAR |
goose_functions
goose_functions() 函数提供 Goose 实例中可用函数(包括宏)的元数据。
| 列 | 描述 | 类型 |
|---|---|---|
database_name | 包含该函数的数据库名称。 | VARCHAR |
database_oid | 包含该索引的数据库内部标识符。 | BIGINT |
schema_name | 函数所在 schema 的 SQL 名称。 | VARCHAR |
function_name | 函数的 SQL 名称。 | VARCHAR |
function_type | 函数类型。取值之一:table、scalar、aggregate、pragma、macro。 | VARCHAR |
description | 该函数描述(始终为 NULL)。 | VARCHAR |
comment | 由 COMMENT ON 语句创建的注释。 | VARCHAR |
tags | 字符串键值对映射。 | MAP(VARCHAR, VARCHAR) |
return_type | 返回值的逻辑数据类型名称。适用于标量函数和聚合函数。 | VARCHAR |
parameters | 若函数有参数,则为参数名列表。 | VARCHAR[] |
parameter_types | 若函数有参数,则为与参数列表对应的逻辑数据类型名称列表。 | VARCHAR[] |
varargs | 若函数支持可变参数,则为该数据类型名称;若不支持可变参数,则为 NULL。 | VARCHAR |
macro_definition | 若这是 macro,则为定义它的 SQL 表达式。 | VARCHAR |
has_side_effects | 若为纯函数则为 false。若函数会改变数据库状态(如序列函数 nextval() 和 curval())则为 true。 | BOOLEAN |
internal | 若函数为内置(由 Goose 或扩展定义)则为 true;若由 CREATE MACRO 语句定义则为 false。 | BOOLEAN |
function_oid | 该函数的内部标识符。 | BIGINT |
examples | 函数使用示例。用于生成文档。 | VARCHAR[] |
stability | 函数稳定性(CONSISTENT、VOLATILE、CONSISTENT_WITHIN_QUERY 或 NULL)。 | VARCHAR |
goose_indexes
goose_indexes() 函数提供 Goose 实例中可用二级索引的元数据。
| 列 | 描述 | 类型 |
|---|---|---|
database_name | 包含该索引的数据库名称。 | VARCHAR |
database_oid | 包含该索引的数据库内部标识符。 | BIGINT |
schema_name | 包含该二级索引所属表的 schema 的 SQL 名称。 | VARCHAR |
schema_oid | schema 对象内部标识符。 | BIGINT |
index_name | 该二级索引的 SQL 名称。 | VARCHAR |
index_oid | 该索引的对象标识符。 | BIGINT |
table_name | 带有该索引的表名称。 | VARCHAR |
table_oid | 表对象内部标识符(名称)。 | BIGINT |
comment | 由 COMMENT ON 语句创建的注释。 | VARCHAR |
tags | 字符串键值对映射。 | MAP(VARCHAR, VARCHAR) |
is_unique | 若索引使用 UNIQUE 修饰符创建则为 true,否则为 false。 | BOOLEAN |
is_primary | 始终为 false。 | BOOLEAN |
expressions | 始终为 NULL。 | VARCHAR |
sql | 以 CREATE INDEX SQL 语句表示的索引定义。 | VARCHAR |
请注意,goose_indexes 只提供二级索引元数据,即通过显式 CREATE INDEX 语句创建的索引。主键、外键和 UNIQUE 约束虽由索引维护,但其详细信息包含在 goose_constraints() 函数中。
goose_keywords
goose_keywords() 函数提供 Goose 关键字和保留字的元数据。
| 列 | 描述 | 类型 |
|---|---|---|
keyword_name | 关键字。 | VARCHAR |
keyword_category | 关键字类别。取值为 column_name、reserved、type_function 和 unreserved。 | VARCHAR |
goose_log_contexts
goose_log_contexts() 函数提供 Goose 日志条目上下文的信息。
| 列 | 描述 | 类型 |
|---|---|---|
context_id | 上下文标识符。goose_logs 表中的 context_id 列是外键,指向本列。 | UBIGINT |
scope | 上下文范围(connection、database 或 file_opener)。 | VARCHAR |
connection_id | 连接标识符。 | UBIGINT |
transaction_id | 事务标识符。 | UBIGINT |
query_id | 查询标识符。 | UBIGINT |
thread_id | 线程标识符。 | UBIGINT |
goose_logs
goose_logs() 函数返回 Goose 日志条目的表。
| 列 | 描述 | 类型 |
|---|---|---|
context_id | 日志条目上下文标识符。外键指向 goose_log_contexts 表。 | UBIGINT |
timestamp | 日志条目的时间戳。 | TIMESTAMP |
type | 日志条目类型。 | VARCHAR |
log_level | 日志级别(TRACE、DEBUG、INFO、WARN、ERROR 或 FATAL)。 | VARCHAR |
message | 日志条目消息内容。 | VARCHAR |
goose_memory
goose_memory() 函数提供 Goose 缓冲区管理器的元数据。
| 列 | 描述 | 类型 |
|---|---|---|
tag | 内存标签。其值之一为:BASE_TABLE、HASH_TABLE、PARQUET_READER、CSV_READER、ORDER_BY、ART_INDEX、COLUMN_DATA、METADATA、OVERFLOW_STRINGS、IN_MEMORY_TABLE、ALLOCATOR、EXTENSION。 | VARCHAR |
memory_usage_bytes | 已使用内存(字节)。 | BIGINT |
temporary_storage_bytes | 已使用磁盘临时存储(字节)。 | BIGINT |
goose_optimizers
goose_optimizers() 函数提供 Goose 实例中可用优化规则(例如 expression_rewriter、filter_pushdown)的元数据。
可通过 PRAGMA disabled_optimizers 选择性禁用这些规则。
| 列 | 描述 | 类型 |
|---|---|---|
name | 优化规则名称。 | VARCHAR |
goose_prepared_statements
goose_prepared_statements() 函数提供当前 Goose 会话中存在的预处理语句元数据。
| 列 | 描述 | 类型 |
|---|---|---|
name | 预处理语句名称。 | VARCHAR |
statement | SQL 语句。 | VARCHAR |
parameter_types | 语句参数的期望参数类型。目前所有参数均返回 UNKNOWN。 | VARCHAR[] |
result_types | 预处理语句返回表中各列的类型。 | VARCHAR[] |
goose_schemas
goose_schemas() 函数提供 Goose 实例中可用 schema 的元数据。
| 列 | 描述 | 类型 |
|---|---|---|
oid | schema 对象内部标识符。 | BIGINT |
database_name | 包含该 schema 的数据库名称。 | VARCHAR |
database_oid | 包含该 schema 的数据库内部标识符。 | BIGINT |
schema_name | schema 的 SQL 名称。 | VARCHAR |
comment | 由 COMMENT ON 语句创建的注释。 | VARCHAR |
tags | 字符串键值对映射。 | MAP(VARCHAR, VARCHAR) |
internal | 若为 internal(内置)schema 则为 true,若为用户定义 schema 则为 false。 | BOOLEAN |
sql | 始终为 NULL。 | VARCHAR |
information_schema.schemata 系统视图提供了更标准化的数据库 schema 元数据获取方式。
goose_secret_types
goose_secret_types() 会列出当前 Goose 会话支持的 secret 类型。
| 列 | 描述 | 类型 |
|---|---|---|
type | secret 类型名称,例如 s3。 | VARCHAR |
default_provider | 默认 secret provider,例如 config。 | VARCHAR |
extension | 注册该 secret 类型的扩展,例如 aws。 | VARCHAR |
goose_secrets
goose_secrets() 函数提供 Goose 实例中可用 secret 的元数据。
| 列 | 描述 | 类型 |
|---|---|---|
name | secret 名称。 | VARCHAR |
type | secret 类型,例如 S3、GCS、R2、AZURE。 | VARCHAR |
provider | secret 的 provider。 | VARCHAR |
persistent | 表示 secret 是否持久化。 | BOOLEAN |
storage | 存储 secret 的后端。 | VARCHAR |
scope | secret 的作用域。 | VARCHAR[] |
secret_string | 以字符串形式返回 secret 内容。敏感信息(例如访问密钥)会被打码。 | VARCHAR |
goose_sequences
goose_sequences() 函数提供 Goose 实例中可用序列的元数据。
| 列 | 描述 | 类型 |
|---|---|---|
database_name | 包含该序列的数据库名称。 | VARCHAR |
database_oid | 包含该序列的数据库内部标识符。 | BIGINT |
schema_name | 包含该序列对象的 schema 的 SQL 名称。 | VARCHAR |
schema_oid | 包含该序列对象的 schema 对象内部标识符。 | BIGINT |
sequence_name | 在 schema 内标识该序列的 SQL 名称。 | VARCHAR |
sequence_oid | 该序列对象的内部标识符。 | BIGINT |
comment | 由 COMMENT ON 语句创建的注释。 | VARCHAR |
tags | 字符串键值对映射。 | MAP(VARCHAR, VARCHAR) |
temporary | 该序列是否为临时序列。临时序列是临时性的,仅在当前连接可见。 | BOOLEAN |
start_value | 序列初始值。首次对该序列调用 nextval() 时将返回此值。 | BIGINT |
min_value | 序列最小值。 | BIGINT |
max_value | 序列最大值。 | BIGINT |
increment_by | 从序列取下一个值时,加到当前值上的增量。 | BIGINT |
cycle | 当取下一个值将超出范围时,序列是否应从范围边界重新开始。 | BOOLEAN |
last_value | 若从未使用 nextval(...) 取值则为 NULL;若曾经取过值则为 1。 | BIGINT |
sql | 以 SQL DDL 语句表示的对象定义。 | VARCHAR |
temporary、start_value 等属性对应 CREATE SEQUENCE 语句中的各项选项,并在该文档中有完整说明。请注意,即使在 CREATE SEQUENCE 语句中未显式指定,这些属性在 goose_sequences 的结果集中也会始终被填充。
列名
last_value看起来像是“最近一次从序列取出的值”,但实际并非如此。它要么为NULL(表示从未从该序列取值),要么为1(表示曾经至少取过一次值)。如果序列设置为循环,则序列会从其范围边界重新开始,而不一定从指定的起始值开始。
goose_settings
goose_settings() 函数提供 Goose 实例中可用设置项的元数据。
| 列 | 描述 | 类型 |
|---|---|---|
name | 设置项名称。 | VARCHAR |
value | 设置项当前值。 | VARCHAR |
description | 设置项说明。 | VARCHAR |
input_type | 设置项值的逻辑数据类型。 | VARCHAR |
scope | 设置项作用域(LOCAL 或 GLOBAL)。 | VARCHAR |
各设置项详见配置页面。
goose_tables
goose_tables() 函数提供 Goose 实例中可用基表的元数据。
| 列 | 描述 | 类型 |
|---|---|---|
database_name | 包含该表的数据库名称。 | VARCHAR |
database_oid | 包含该表的数据库内部标识符。 | BIGINT |
schema_name | 包含该基表的 schema 的 SQL 名称。 | VARCHAR |
schema_oid | 包含该基表的 schema 对象内部标识符。 | BIGINT |
table_name | 基表的 SQL 名称。 | VARCHAR |
table_oid | 基表对象内部标识符。 | BIGINT |
comment | 由 COMMENT ON 语句创建的注释。 | VARCHAR |
tags | 字符串键值对映射。 | MAP(VARCHAR, VARCHAR) |
internal | 若为用户定义表则为 false。 | BOOLEAN |
temporary | 该表是否为临时表。临时表不会持久化,且仅在当前连接可见。 | BOOLEAN |
has_primary_key | 若该表对象定义了 PRIMARY KEY 则为 true。 | BOOLEAN |
estimated_size | 表中行数估计值。 | BIGINT |
column_count | 该对象定义的列数。 | BIGINT |
index_count | 与该表关联的索引数。该值包含所有二级索引,以及为维护 PRIMARY KEY 和/或 UNIQUE 约束而生成的 internal 索引。 | BIGINT |
check_constraint_count | 表内列上生效的检查约束数量。 | BIGINT |
sql | 以 SQL CREATE TABLE 语句表示的对象定义。 | VARCHAR |
information_schema.tables 系统视图提供了更标准化的数据库表元数据获取方式,并且也包含视图。但 goose_tables 返回的结果集中含有 information_schema.tables 未包含的若干列。
goose_temporary_files
goose_temporary_files() 函数提供 Goose 为将数据从内存卸载到磁盘而写入的临时文件元数据。该函数主要用于调试和测试。
| 列 | 描述 | 类型 |
|---|---|---|
path | 临时文件名。 | VARCHAR |
size | 临时文件大小(字节)。 | BIGINT |
goose_types
goose_types() 函数提供 Goose 实例中可用数据类型的元数据。
| 列 | 描述 | 类型 |
|---|---|---|
database_name | 包含该 schema 的数据库名称。 | VARCHAR |
database_oid | 包含该数据类型的数据库内部标识符。 | BIGINT |
schema_name | 包含类型定义的 schema 的 SQL 名称。始终为 main。 | VARCHAR |
schema_oid | schema 对象内部标识符。 | BIGINT |
type_name | 该数据类型的名称或别名。 | VARCHAR |
type_oid | 数据类型对象内部标识符。若为 NULL,则该项是此类型的别名(由 logical_type 列值标识)。 | BIGINT |
type_size | 在内存中表示该类型值所需的字节数。 | BIGINT |
logical_type | 该数据类型的“规范”名称。相同 logical_type 可能被多个不同 type_name 的类型引用。 | VARCHAR |
type_category | 该类型所属类别。同一类别中的数据类型在表达式中通常具有相似行为。例如,NUMERIC type_category 包括整数、小数和浮点数。 | VARCHAR |
comment | 由 COMMENT ON 语句创建的注释。 | VARCHAR |
tags | 字符串键值对映射。 | MAP(VARCHAR, VARCHAR) |
internal | 表示这是 internal(内置)对象还是用户对象。 | BOOLEAN |
labels | 用于对类型进行分类的标签。用于生成文档。 | VARCHAR[] |
goose_variables
goose_variables() 函数提供 Goose 实例中可用变量的元数据。
| 列 | 描述 | 类型 |
|---|---|---|
name | 变量名称,例如 x。 | VARCHAR |
value | 变量值,例如 12。 | VARCHAR |
type | 变量类型,例如 INTEGER。 | VARCHAR |
goose_views
goose_views() 函数提供 Goose 实例中可用视图的元数据。
| 列 | 描述 | 类型 |
|---|---|---|
database_name | 包含该视图的数据库名称。 | VARCHAR |
database_oid | 包含该视图的数据库内部标识符。 | BIGINT |
schema_name | 视图所在 schema 的 SQL 名称。 | VARCHAR |
schema_oid | 包含该视图的 schema 对象内部标识符。 | BIGINT |
view_name | 视图对象的 SQL 名称。 | VARCHAR |
view_oid | 该视图对象的内部标识符。 | BIGINT |
comment | 由 COMMENT ON 语句创建的注释。 | VARCHAR |
tags | 字符串键值对映射。 | MAP(VARCHAR, VARCHAR) |
internal | 若为 internal(内置)视图则为 true,若为用户定义视图则为 false。 | BOOLEAN |
temporary | 若为临时视图则为 true。临时视图不会持久化,且仅在当前连接可见。 | BOOLEAN |
column_count | 该视图对象定义的列数。 | BIGINT |
sql | 以 SQL DDL 语句表示的对象定义。 | VARCHAR |
information_schema.tables 系统视图提供了更标准化的数据库视图元数据获取方式,并且也包含基表。但 goose_views 返回结果集还包含 internal 视图对象的定义,以及 information_schema.tables 未包含的若干列。