SuperAPI AI 工具集

duckdb-extensions

数据与分析

查看项目

更新于 10-16 00:04

技能介绍

用途:指导构建可被 DuckDB 加载的扩展(.duckdb_extension)。核心要求是扩展必须使用与加载它的 DuckDB 完全相同的版本构建,推荐用 FetchContent 指定具体 git tag(如 v1.2.1),不要用 main 或 master。

主要能力与要点:扩展必须通过 append_metadata.cmake 脚本追加元数据,否则 DuckDB 报“not a DuckDB extension”。可移植扩展应链接 duckdb_static,并设置 CXX_VISIBILITY_PRESET hidden 与 -Wl,--gc-sections、-Wl,--exclude-libs,ALL。链接进共享扩展的静态库必须开启 POSITION_INDEPENDENT_CODE ON。DuckDB 1.1+ 中执行期 bind_data 为 const,可变状态应放在 GlobalTableFunctionState,并通过 init_global 注册,在 execute 中用 input.bind_data->Cast 与 input.global_state->Cast 访问。

使用方式:CMake 中通过 FetchContent_Declare/MakeAvailable 拉取 DuckDB,构建 SHARED 库并设 OUTPUT_NAME、PREFIX ""、SUFFIX ".duckdb_extension",POST_BUILD 调用 append_metadata.cmake(ABI_TYPE=CPP、PLATFORM_FILE 用 duckdb_platform_out、VERSION_FIELD 与 EXTENSION_VERSION 均含 v 前缀),并 add_dependencies 到 duckdb_platform。入口点需在 extern "C" 中提供 {name}_init 与 {name}_version,配合 DUCKDB_EXTENSION_API。开发期可用 LOAD '/path/x.duckdb_extension' 或 duckdb -unsigned 加载;安装路径为 ~/.duckdb/extensions/v{version}/{platform}/,可用 ~/.duckdbrc 自动 LOAD,且 SET 必须写在 LOAD 之后。扩展可通过 DBConfig::GetConfig 与 AddExtensionOption 注册自定义设置。

常见排查:平台不匹配(linux_amd64 与 linux_amd64_gcc4)可用自建 duckdb 二进制或对齐平台;版本不匹配需保证版本字符串带 v 前缀;PIC 重定位错误为静态库未开 PIC;缺少 duckdb_platform 依赖会导致 duckdb_platform_out 找不到。

限制:未提供除上述内容外的更多平台、命令或价格等信息。