跳到主要内容

构建扩展

Extensions 可以从源码构建,并通过本地产生的二进制安装。

构建扩展

若通过扩展标志构建,请将 BUILD_EXTENSIONS 设为要构建的扩展列表。例如:

BUILD_EXTENSIONS='autocomplete;httpfs;icu;json;tpch' GEN=ninja make

该选项也支持 out-of-tree 扩展,例如 delta

BUILD_EXTENSIONS='autocomplete;httpfs;icu;json;tpch;delta' GEN=ninja make

多数情况下,扩展会直接链接进最终 Goose 可执行文件。

特殊扩展标志

BUILD_JEMALLOC

设置该标志后会构建 jemalloc 扩展

BUILD_TPCE

设置该标志后会构建 TPCE 库。与 TPC-H 和 TPC-DS 不同,它不是标准扩展,也不会以扩展形式分发。启用后可在测试套件中运行 TPC-E 相关查询。

Debug 标志

CRASH_ON_ASSERT

代码中广泛使用 D_ASSERT(condition),在 debug 构建中触发时会抛出 InternalException。 启用该标志后,断言触发将直接导致崩溃。

DISABLE_STRING_INLINE

在执行格式中,string_t 支持将一定长度以下字符串(12 字节)“内联”,从而避免单独分配。 设置该标志后会禁用该能力,小字符串不再内联。

DISABLE_MEMORY_SAFETY

我们在非性能关键代码中大量使用的数据结构带有额外内存安全检查,包括:

  • 确保不会解引用 nullptr
  • 确保越界访问不会直接导致崩溃

启用该标志后会移除这些检查,主要用于评估这些检查带来的性能开销是否可忽略。

DESTROY_UNPINNED_BLOCKS

在 BufferManager 中,若此前 pin 住的 block 被 unpin,启用该标志后会立即销毁这些 block,以确保不存在“已 unpin 但内存仍被使用”的情况。

DEBUG_STACKTRACE

当测试中发生崩溃或断言触发时,打印堆栈信息。 这有助于排查那些即使附加调试器也难以定位的崩溃。

使用 CMake 配置文件

若要使用 CMake 配置文件构建,可创建 extension_config.cmake,例如:

goose_extension_load(autocomplete)
goose_extension_load(fts)
goose_extension_load(inet)
goose_extension_load(icu)
goose_extension_load(json)
goose_extension_load(parquet)

按如下方式构建 Goose:

GEN=ninja EXTENSION_CONFIGS="extension_config.cmake" make

随后若要一次性安装这些扩展,执行:

# for release builds
cd build/release/extension/
# for debug builds
cd build/debug/extension/
# install extensions
for EXTENSION in *; do
../goose -c "INSTALL '${EXTENSION}/${EXTENSION}.goose_extension';"
done