Extensions 可以从源代码构建并从生成的本地二进制文件安装。
使用构建标志构建扩展
要使用扩展标志进行构建,请将CORE_EXTENSIONS
标志设置为您想要构建的扩展列表。
在大多数情况下,扩展将直接链接到生成的DuckDB可执行文件。
例如,要构建带有httpfs
扩展的DuckDB,请运行以下脚本:
GEN=ninja CORE_EXTENSIONS='httpfs' make
特殊扩展标志
BUILD_JEMALLOC
当此标志设置时,将构建jemalloc
扩展。
BUILD_TPCE
当此标志设置时,TPCE 库将被构建。与 TPC-H 和 TPC-DS 不同,这不是一个适当的扩展,也不会以这种方式分发。启用此标志允许通过我们的测试套件执行启用 TPC-E 的查询。
调试标志
CRASH_ON_ASSERT
D_ASSERT(condition)
在代码中广泛使用,这些断言在调试版本中会抛出 InternalException。启用此标志后,当断言触发时,它将直接导致崩溃。
DISABLE_STRING_INLINE
在我们的执行格式中,string_t
具有将长度小于一定值(12字节)的字符串“内联”的特性,这意味着它们不需要单独分配。
当设置此标志时,我们禁用此功能,并且不内联小字符串。
DISABLE_MEMORY_SAFETY
我们在非性能关键代码中广泛使用的数据结构有额外的检查来确保内存安全,这些检查包括:
- 确保
nullptr
永远不会被解引用。 - 确保索引越界访问不会触发崩溃。
启用此标志后,我们将移除这些检查,这主要是为了确认这些检查对性能的影响可以忽略不计。
DESTROY_UNPINNED_BLOCKS
当之前在BufferManager中固定的块被取消固定时,启用此标志后我们会立即销毁它们,以确保不会出现尽管未被固定但仍在使用此内存的情况。
DEBUG_STACKTRACE
当测试中发生崩溃或断言命中时,打印堆栈跟踪。 这在调试难以通过附加调试器定位的崩溃时非常有用。
使用CMake配置文件
要使用CMake配置文件进行构建,请创建一个名为extension_config.cmake
的扩展配置文件,内容如下:
duckdb_extension_load(autocomplete)
duckdb_extension_load(fts)
duckdb_extension_load(inet)
duckdb_extension_load(icu)
duckdb_extension_load(json)
duckdb_extension_load(parquet)
按如下方式构建DuckDB:
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
../duckdb -c "INSTALL '${EXTENSION}/${EXTENSION}.duckdb_extension';"
done