⌘+k ctrl+k
1.3 (稳定版)
搜索快捷键 cmd + k | ctrl + k
扩展分发

平台

扩展二进制文件已分发到多个平台(见下文)。对于某些扩展包不可用的平台,用户可以从源代码构建它们,并手动安装生成的二进制文件

所有官方扩展均分发到以下平台。

平台名称 操作系统 架构 CPU 类型 使用者
linux_amd64 Linux x86_64 (AMD64)   Node.js 包等。
linux_arm64 Linux AArch64 (ARM64) AWS Graviton、Snapdragon 等。 所有包
osx_amd64 macOS x86_64 (AMD64) Intel 所有包
osx_arm64 macOS AArch64 (ARM64) Apple Silicon M1、M2 等。 所有包
windows_amd64 Windows x86_64 (AMD64) Intel、AMD 等。 所有包

某些扩展分发到以下平台

对于上述列表之外的平台,我们不正式分发扩展(例如,linux_arm64_android)。

扩展签名

已签名扩展

扩展可以使用加密密钥进行签名。默认情况下,DuckDB 使用其内置的公钥来验证扩展的完整性,然后才加载它们。所有核心和社区扩展均由 DuckDB 团队签名。

签署扩展简化了它们的发布,这就是它们可以通过 HTTP 分发而无需 HTTPS 的原因,而 HTTPS 本身是通过一个扩展(httpfs)支持的。

未签名扩展

警告 仅从您信任的来源加载未签名扩展。避免通过 HTTP 加载未签名扩展。有关如何安全设置 DuckDB 的指南,请查阅保护 DuckDB 页面

如果您希望加载自己的扩展或来自第三方的扩展,则需要启用 allow_unsigned_extensions 标志。要使用 CLI 客户端加载未签名扩展,请在启动时向其传递 -unsigned 标志。

duckdb -unsigned

现在任何扩展都可以加载,无论是否已签名。

LOAD './some/local/ext.duckdb_extension';

对于客户端 API,需要设置 allow_unsigned_extensions 数据库配置选项,请参阅相应的客户端 API 文档。例如,对于 Python 客户端,请参阅Python API 文档中的“加载和安装扩展”部分

二进制兼容性

为避免二进制兼容性问题,DuckDB 分发的二进制扩展与特定的 DuckDB 版本和平台绑定。这意味着 DuckDB 可以自动检测其与可加载扩展之间的二进制兼容性。当尝试加载为不同版本或平台编译的扩展时,DuckDB 将抛出错误并拒绝加载该扩展。

创建自定义存储库

您可以创建自定义 DuckDB 扩展存储库。DuckDB 存储库是一个基于 HTTP、HTTPS、S3 或本地文件的目录,以特定结构提供扩展文件。此结构在“直接从 S3 下载扩展”部分中描述,并且对于本地路径和远程服务器都相同,例如

base_repository_path_or_url
└── v1.0.0
    └── osx_arm64
        ├── autocomplete.duckdb_extension
        ├── httpfs.duckdb_extension
        ├── icu.duckdb_extension
        ├── inet.duckdb_extension
        ├── json.duckdb_extension
        ├── parquet.duckdb_extension
        ├── tpcds.duckdb_extension
        ├── tpcds.duckdb_extension
        └── tpch.duckdb_extension

有关设置存储库所需的所有代码和脚本,请参阅 extension-template 存储库

从自定义存储库安装扩展时,DuckDB 将同时搜索 gzip 压缩版和非 gzip 压缩版。例如

INSTALL icu FROM 'custom_repository';

此语句的执行将首先在存储库的目录结构中查找 icu.duckdb_extension.gz,然后查找 icu.duckdb_extension

如果自定义存储库通过 HTTPS 或 S3 提供,则需要 httpfs 扩展。当尝试通过 HTTPS 或 S3 进行安装时,DuckDB 将尝试自动加载 httpfs 扩展。