- 安装
- 文档
- 入门
- 连接
- 数据导入与导出
- 湖仓格式
- 客户端 API
- 概览
- 第三方客户端
- ADBC
- C
- C++
- CLI
- Dart
- Go
- Java (JDBC)
- Julia
- Node.js (已弃用)
- Node.js (Neo)
- ODBC
- PHP
- Python
- R
- Rust
- Swift
- Wasm
- SQL
- 介绍
- 语句
- 概览
- ANALYZE
- ALTER TABLE
- ALTER VIEW
- ATTACH 和 DETACH
- CALL
- CHECKPOINT
- COMMENT ON
- COPY
- CREATE INDEX
- CREATE MACRO
- CREATE SCHEMA
- CREATE SECRET
- CREATE SEQUENCE
- CREATE TABLE
- CREATE VIEW
- CREATE TYPE
- DELETE
- DESCRIBE
- DROP
- EXPORT 和 IMPORT DATABASE
- INSERT
- LOAD / INSTALL
- MERGE INTO
- PIVOT
- 性能分析
- SELECT
- SET / RESET
- SET VARIABLE
- SHOW 与 SHOW DATABASES
- SUMMARIZE
- 事务管理
- UNPIVOT
- UPDATE
- USE
- VACUUM
- 查询语法
- SELECT
- FROM 和 JOIN
- WHERE
- GROUP BY
- GROUPING SETS
- HAVING
- ORDER BY
- LIMIT 和 OFFSET
- SAMPLE
- 展开嵌套
- WITH
- WINDOW
- QUALIFY
- VALUES
- FILTER
- 集合操作
- 预处理语句
- 数据类型
- 表达式
- 函数
- 概览
- 聚合函数
- 数组函数
- 位字符串函数
- Blob 函数
- 日期格式化函数
- 日期函数
- 日期部分函数
- 枚举函数
- 间隔函数
- Lambda 函数
- 列表函数
- 映射函数
- 嵌套函数
- 数值函数
- 模式匹配
- 正则表达式
- 结构体函数
- 文本函数
- 时间函数
- 时间戳函数
- 带时区时间戳函数
- 联合函数
- 实用函数
- 窗口函数
- 约束
- 索引
- 元查询
- DuckDB 的 SQL 方言
- 示例
- 配置
- 扩展
- 核心扩展
- 概览
- 自动补全
- Avro
- AWS
- Azure
- Delta
- DuckLake
- 编码
- Excel
- 全文搜索
- httpfs (HTTP 和 S3)
- Iceberg
- ICU
- inet
- jemalloc
- Lance
- MySQL
- PostgreSQL
- 空间
- SQLite
- TPC-DS
- TPC-H
- UI
- Unity Catalog
- Vortex
- VSS
- 指南
- 概览
- 数据查看器
- 数据库集成
- 文件格式
- 概览
- CSV 导入
- CSV 导出
- 直接读取文件
- Excel 导入
- Excel 导出
- JSON 导入
- JSON 导出
- Parquet 导入
- Parquet 导出
- 查询 Parquet 文件
- 使用 file: 协议访问文件
- 网络和云存储
- 概览
- HTTP Parquet 导入
- S3 Parquet 导入
- S3 Parquet 导出
- S3 Iceberg 导入
- S3 Express One
- GCS 导入
- Cloudflare R2 导入
- 通过 HTTPS / S3 使用 DuckDB
- Fastly 对象存储导入
- 元查询
- ODBC
- 性能
- Python
- 安装
- 执行 SQL
- Jupyter Notebooks
- marimo Notebooks
- Pandas 上的 SQL
- 从 Pandas 导入
- 导出到 Pandas
- 从 Numpy 导入
- 导出到 Numpy
- Arrow 上的 SQL
- 从 Arrow 导入
- 导出到 Arrow
- Pandas 上的关系型 API
- 多个 Python 线程
- 与 Ibis 集成
- 与 Polars 集成
- 使用 fsspec 文件系统
- SQL 编辑器
- SQL 功能
- 代码片段
- 故障排除
- 术语表
- 离线浏览
- 操作手册
- 概览
- DuckDB 的占用空间
- 安装 DuckDB
- 日志
- 保护 DuckDB 安全
- 非确定性行为
- 限制
- DuckDB Docker 容器
- 开发
- 内部结构
- 站点地图
- 在线演示
要安装核心 DuckDB 扩展,请使用 INSTALL 命令。例如
INSTALL httpfs;
这将从默认存储库(core)安装扩展。
扩展存储库
默认情况下,DuckDB 扩展从单一存储库安装,该存储库包含由 DuckDB 核心团队构建并签名的扩展。这确保了核心扩展集的稳定性和安全性。这些扩展位于默认的 core 存储库中,该存储库指向 http://extensions.duckdb.org。
除核心存储库外,DuckDB 还支持从其他存储库安装扩展。例如,core_nightly 存储库包含为 DuckDB 最新稳定版本构建的核心扩展的每日构建版本(nightly builds)。这允许用户在正式发布扩展之前试用其中的新功能。
从不同存储库安装扩展
要从默认存储库(core)安装扩展,请运行
INSTALL httpfs;
要明确从核心存储库安装扩展,请运行
INSTALL httpfs FROM core;
-- or
INSTALL httpfs FROM 'http://extensions.duckdb.org';
要从核心每日构建(nightly)存储库安装扩展
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 包含以下预定义存储库
| 别名 | URL | 描述 |
|---|---|---|
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 时创建的存储库(用于开发) |
使用多个存储库
在使用来自不同存储库的扩展时,尤其是混合使用 core 和 core_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 哈希值。因此,例如 macOS ARM64 (Apple Silicon) 上 DuckDB 版本 v0.10.3 的扩展被安装到 ~/.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 上的 1.2.1 版 CLI 客户端安装的,那么只要 Python、R 等客户端库有权访问用户的主目录并使用 DuckDB 1.2.1 版本,它们就可以使用该扩展。
限制
DuckDB 的扩展机制具有以下局限性
- 扩展无法卸载。
- 扩展无法重新加载。如果您 更新了扩展,请重启 DuckDB 进程以使用新的扩展。