跳到主要内容

安装

duckfn_open 需要 DuckDB 1.3 或更新。它是一个普通的可加载扩展,INSTALL 与 LOAD 就是全部; 没有额外的下载、库文件或配置步骤。它跑在一台有桌面的机器上 —— Windows、Linux 或 macOS —— 因为启动器 就在那里。这也划定了它的范围:它是给交互式探索用的,不是给嵌进应用里的 DuckDB 用的。

从社区仓安装​

最省事的一条,也是唯一不需要任何命令行开关的:

INSTALL duckfn_open FROM community;
LOAD duckfn_open;

DuckDB 会下载一份签过名、且与你本机 DuckDB 版本和平台匹配的构建。INSTALL 只需做一次,但每个新会话 都要重新 LOAD。

关于这条路

INSTALL … FROM community 要等扩展注册进 DuckDB 社区仓之后才可用。注册是维护者做的一步,见 社区扩展;在那之前,用 Release 文件或本地构建的产物。

从 GitHub Release 安装​

每个版本都会发成一个 GitHub Release,里面按桌面平台各挂一份 .duckdb_extension,命名是 duckfn_open-<平台>.duckdb_extension(windows_amd64、linux_amd64、osx_arm64 之类)。下载你平台的那 一份,并改名成 duckfn_open.duckdb_extension:DuckDB 是拿文件名去找入口点符号的,直接用 Release 里的 名字会报 did not contain function "duckfn_open-windows_amd64_init_c_api";而 LOAD 本来也不去下载 URL, 它收的是扩展名或本地路径:

curl -LO https://github.com/shijianjs/duckfn-open/releases/latest/download/duckfn_open-windows_amd64.duckdb_extension
mv duckfn_open-windows_amd64.duckdb_extension duckfn_open.duckdb_extension
duckdb -unsigned -c "LOAD './duckfn_open.duckdb_extension';"

Release 里的文件没有用 DuckDB 的发行密钥签名,所以要加 -unsigned。发布的只有桌面平台,也只有这些平台 装载这个扩展有意义:Windows、Linux 与 macOS 各有一个可以把文件交出去的启动器,而 WebAssembly 构建一个 都没有,所以也不存在那样的资产。

从本地构建的产物安装​

如果你自己从源码构建了扩展,把 LOAD 指到产物上 —— 同样要用 -unsigned 启动 DuckDB:

LOAD './build/debug/duckfn_open.duckdb_extension';

怎么构建见开发指南。

确认它加载上了​

duckdb_extensions() 列出可用的扩展,duckdb_functions() 列出可调用的函数:

SELECT extension_name, installed, loaded
FROM duckdb_extensions()
WHERE extension_name = 'duckfn_open';
SELECT function_name, len(parameters), return_type
FROM duckdb_functions()
WHERE function_name LIKE 'op%';

这个扩展注册九个名字,对应二十一行(op_write_file 与 op_open_content 各四个签名 —— 文本与二进制 × 带选项与 不带选项;op_open_path、op_open_path_detached、op_print 与 op_sanitize_filename_check 各两个;op_sanitize_filename 三个;op_open_commands 与 op_open_html 各一个)。落盘签名要传的那个选项 STRUCT 是注册的类型而不是函数,所以 它出现在 duckdb_types() 里,不在这里。如果一行都没有,说明你查的这个会话里没有加载这个扩展。