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

要安装核心 DuckDB 扩展,请使用 INSTALL 命令。例如

INSTALL httpfs;

这将从默认仓库(core)安装扩展。

扩展仓库

默认情况下,DuckDB 扩展从一个包含由核心 DuckDB 团队构建和签名的扩展的仓库安装。这确保了核心扩展集的稳定性和安全性。这些扩展位于默认的 core 仓库中,该仓库指向 http://extensions.duckdb.org

除了核心仓库,DuckDB 还支持从其他仓库安装扩展。例如,core_nightly 仓库包含为最新稳定版 DuckDB 构建的核心扩展的每夜构建。这允许用户在扩展正式发布之前试用新功能。

从不同仓库安装扩展

要从默认仓库(core)安装扩展,请运行

INSTALL httpfs;

要明确地从核心仓库安装扩展,请运行

INSTALL httpfs FROM core;
-- or
INSTALL httpfs FROM 'http://extensions.duckdb.org';

要从核心每夜仓库安装扩展

INSTALL spatial FROM core_nightly;
-- or
INSTALL spatial FROM 'http://nightly-extensions.duckdb.org';

要从自定义仓库安装扩展

INSTALL custom_extension FROM 'https://my-custom-extension-repository';

或者,可以使用 custom_extension_repository 设置来更改 DuckDB 使用的默认仓库

SET custom_extension_repository = 'http://nightly-extensions.duckdb.org';

DuckDB 包含以下预定义仓库

别名 网址 描述
core http://extensions.duckdb.org DuckDB 核心扩展
core_nightly http://nightly-extensions.duckdb.org core 的每夜构建
community http://community-extensions.duckdb.org DuckDB 社区扩展
local_build_debug ./build/debug/repository 在调试模式下从源代码构建 DuckDB 时创建的仓库(用于开发)
local_build_release ./build/release/repository 在发布模式下从源代码构建 DuckDB 时创建的仓库(用于开发)

使用多个仓库

当使用来自不同仓库的扩展时,尤其是在混合使用 corecore_nightly 时,了解不同扩展的来源和版本非常重要。因此,DuckDB 会在扩展安装元数据中跟踪这些信息。例如

INSTALL httpfs FROM core;
INSTALL aws FROM core_nightly;
SELECT extension_name, extension_version, installed_from, install_mode
FROM duckdb_extensions();

输出如下

extensions_name extensions_version installed_from install_mode
httpfs 62d61a417f core REPOSITORY
aws 42c78d3 core_nightly REPOSITORY

强制安装以升级扩展

当 DuckDB 安装扩展时,它会被复制到本地目录进行缓存,以避免未来的网络流量。任何后续对 INSTALL extension_name 的调用都将使用本地版本,而不是再次下载扩展。要强制重新下载扩展,请运行

FORCE INSTALL extension_name;

强制安装也可以用于用来自另一个仓库的同名扩展覆盖现有扩展,

例如,首先,从核心仓库安装 spatial

INSTALL spatial;

然后,要用来自 core_nightly 仓库的 spatial 扩展覆盖此安装

FORCE INSTALL spatial FROM core_nightly;

在仓库之间切换

要为扩展切换仓库,请使用 FORCE INSTALL 命令。例如,如果您已从 core_nightly 仓库安装了 httpfs,但希望切换回使用 core,请运行

FORCE INSTALL httpfs FROM core;

通过客户端 API 安装扩展

对于许多客户端来说,使用 SQL 加载和安装扩展是首选方法。然而,一些客户端有专用的 API 来安装和加载扩展。例如,Python 客户端有专用的 install_extension(name: str)load_extension(name: str) 方法。有关特定客户端 API 的更多详细信息,请参阅客户端 API 文档

安装位置

默认情况下,扩展安装在用户的主目录下

~/.duckdb/extensions/duckdb_version/platform_name/

对于稳定的 DuckDB 版本,duckdb_version 将等于该版本的版本标签。对于 DuckDB 每夜构建,它将等于构建的简短 Git 哈希。因此,例如,DuckDB v0.10.3 版本在 macOS ARM64 (Apple Silicon) 上的扩展将安装到 ~/.duckdb/extensions/v0.10.3/osx_arm64/。一个 DuckDB 每夜构建的示例安装路径可能是 ~/.duckdb/extensions/fc2e4b26a6/linux_amd64

要更改 DuckDB 存储其扩展的默认位置,请使用 extension_directory 配置选项

SET extension_directory = '/path/to/your/extension/directory';

请注意,设置 home_directory 配置选项的值对扩展的位置没有影响。

卸载扩展

目前,DuckDB 不提供卸载扩展的命令。要卸载扩展,请导航到扩展的安装位置并删除其 .duckdb_extension 二进制文件:例如

rm ~/.duckdb/extensions/v1.2.1/osx_arm64/excel.duckdb_extension

在客户端之间共享扩展

共享安装位置允许在相同 DuckDB 版本的客户端 API 之间共享扩展,只要它们共享相同的 platform 或 ABI。例如,如果扩展通过 macOS 上的 CLI 客户端版本 1.2.1 安装,则只要 Python、R 等客户端库可以访问用户的主目录并使用 DuckDB 版本 1.2.1,它们就可以使用该扩展。

限制

DuckDB 的扩展机制有以下限制

  • 扩展无法卸载。
  • 扩展无法重新加载。如果您更新扩展,请重新启动 DuckDB 进程以使用新的扩展。