⌘+k ctrl+k
1.4 (LTS)
搜索快捷键 cmd + k | ctrl + k
扩展

DuckDB-Wasm 的(动态)扩展加载模式仿照了常规 DuckDB 的扩展加载方式,但由于平台差异,存在一些相关的不同之处。

格式

DuckDB 中的扩展是通过 dlopen 动态加载的二进制文件。二进制文件末尾会附加一个加密签名。DuckDB-Wasm 中的扩展则是通过 Emscripten 的 dlopen 动态加载的常规 Wasm 文件。加密签名以名为 duckdb_signature 的 WebAssembly 自定义段(custom section)形式附加到 Wasm 文件中。这确保了该文件仍是一个有效的 WebAssembly 文件。

目前,我们要求该自定义段必须位于文件末尾,但未来可能会放宽这一限制。

INSTALLLOAD

DuckDB 原生嵌入式环境中的 INSTALL 语义是获取、通过 gzip 解压并将数据存储在本地磁盘上。DuckDB 原生嵌入式环境中的 LOAD 语义是(可选地)执行签名检查,并将二进制文件与主要的 DuckDB 二进制文件一起动态加载。

在 DuckDB-Wasm 中,由于没有持久化的跨会话存储,INSTALL 是一个空操作。而 LOAD 操作将执行获取(并实时解压)、签名检查,以及通过 Emscripten 实现的 dlopen 进行动态加载。

自动加载

DuckDB-Wasm 默认启用了自动加载(Autoloading)功能,即 DuckDB 可以在需要时即时添加扩展功能。

官方可用扩展列表

扩展名称 描述 别名
autocomplete 在 Shell 中添加自动补全支持  
excel 增加对类似 Excel 格式字符串的支持  
fts 增加对全文搜索索引的支持  
icu 增加使用 ICU 库对时区和排序规则的支持  
inet 增加对 IP 相关数据类型和函数的支持  
json 增加对 JSON 操作的支持  
parquet 增加对读取和写入 Parquet 文件的支持  
sqlite 增加对读取 SQLite 数据库文件的支持 sqlite, sqlite3
sqlsmith    
tpcds 增加 TPC-DS 数据生成和查询支持  
tpch 增加 TPC-H 数据生成和查询支持  

WebAssembly 本质上是一个额外的平台,可能存在一些平台特定的限制,导致某些扩展无法达到其原生功能,或者必须以不同的方式执行。我们在此记录 DuckDB 托管扩展的相关差异。

HTTPFS

HTTPFS 扩展目前在 DuckDB-Wasm 中不可用。Https 协议功能需要经过一个额外的层(浏览器),这既带来了差异,也对原生环境下的操作施加了一些限制。

相反,DuckDB-Wasm 有一个单独的实现,在大多数用途下是可互换的,但不支持所有用例(因为它必须遵循浏览器强制执行的安全规则,例如 CORS)。由于这种 CORS 限制,任何使用 HTTPFS 扩展发出的数据请求都必须发送到允许(使用 CORS 头部)托管 DuckDB-Wasm 实例的网站访问该数据的网站。MDN 网站是了解有关 CORS 更多信息的绝佳资源。

扩展签名

与常规 DuckDB 扩展一样,DuckDB-Wasm 扩展默认会在 LOAD 时检查,以验证签名并确保扩展未被篡改。扩展签名验证可以通过配置选项禁用。签名是二进制文件本身的属性,因此复制 DuckDB 扩展(例如从不同位置提供服务)仍将保留有效的签名(例如用于本地开发)。

获取 DuckDB-Wasm 扩展

官方 DuckDB 扩展托管在 extensions.duckdb.org,这也是 default_extension_repository 选项的默认值。安装扩展时,会构建一个类似于 extensions.duckdb.org/$duckdb_version_hash/$duckdb_platform/$name.duckdb_extension.gz 的相关 URL。

DuckDB-Wasm 扩展仅在加载时获取,其 URL 类似于:extensions.duckdb.org/duckdb-wasm/$duckdb_version_hash/$duckdb_platform/$name.duckdb_extension.wasm

注意,文件夹结构中增加了一个额外的 duckdb-wasm,且文件是以 .wasm 文件形式提供的。

DuckDB-Wasm 扩展使用 Brotli 压缩预先压缩。通过浏览器获取时,扩展将被透明地解压。如果您想手动获取 duckdb-wasm 扩展,可以使用 curl --compress extensions.duckdb.org/<...>/icu.duckdb_extension.wasm

从第三方仓库提供扩展

与常规 DuckDB 一样,如果您使用 SET custom_extension_repository = 'https://some.url.com',后续加载将尝试在 https://some.url.com/duckdb-wasm/$duckdb_version_hash/$duckdb_platform/$name.duckdb_extension.wasm 处进行。

注意,对扩展的 GET 请求需要是 CORS 启用的,以便浏览器允许该连接。

工具

DuckDB-Wasm 及其扩展均已使用最新的封装 Emscripten 工具链编译。

© 2025 DuckDB 基金会,阿姆斯特丹,荷兰
行为准则 商标使用指南