用途
install-duckdb 用于安装或更新 DuckDB 扩展。它通过命令行参数接收一个或多个扩展,并调用 DuckDB CLI 执行安装或更新操作。
主要能力
- 安装扩展:支持两种参数形式。
- 纯扩展名(name):执行
INSTALL name;,从核心仓库安装。 - name@repo 形式(例如 magic@community):执行
INSTALL name FROM repo;,从指定仓库安装。
- 纯扩展名(name):执行
- 更新扩展:通过 --update 标志进入更新模式。
- 不带扩展名时更新全部扩展:
UPDATE EXTENSIONS; - 带扩展名时更新指定扩展:
UPDATE EXTENSIONS (<name1>, <name2>, ...);(忽略 @repo 部分)
- 不带扩展名时更新全部扩展:
- 检查并升级 DuckDB CLI:在更新模式下,先比较当前版本与最新稳定版本。若版本不一致,会询问用户是否升级,并在用户同意后根据平台执行相应升级命令。
使用方式
参数形式为 $@,每个扩展参数为 name 或 name@repo。
执行流程:
-
定位 DuckDB:通过
DUCKDB=$(command -v duckdb)查找。若未找到,提示用户先安装 DuckDB,并给出各平台安装命令,然后停止执行。- macOS:
brew install duckdb - Linux:
curl -fsSL https://install.duckdb.org | sh - Windows:
winget install DuckDB.cli提示用户安装后重新运行/duckdb-skills:install-duckdb。
- macOS:
-
检查 --update 标志:若参数中包含 --update,则从参数列表中移除并设为更新模式;否则为安装模式。
-
构建并运行语句:
- 安装模式:解析每个剩余参数。若包含 @,按 @ 拆分为
INSTALL <name> FROM <repo>;;否则为INSTALL <name>;。所有语句在单次 DuckDB 调用中执行:"$DUCKDB" :memory: -c "INSTALL <ext1>; INSTALL <ext2> FROM <repo2>; ..." - 更新模式:
- 先检查 DuckDB CLI 是否最新:
CURRENT=$(duckdb --version | grep -oE '[0-9]+\.[0-9]+\.[0-9]+')LATEST=$(curl -fsSL https://duckdb.org/data/latest_stable_version.txt) - 若 CURRENT == LATEST,报告 DuckDB CLI 已是最新。
- 若 CURRENT != LATEST,询问用户:DuckDB CLI 已过时(已安装:CURRENT,最新:LATEST)。是否现在升级?
- 用户同意后,检测平台并运行相应升级命令:
- macOS(有 brew):
brew upgrade duckdb - Linux:
curl -fsSL https://install.duckdb.org | sh - Windows:
winget upgrade DuckDB.cli
- macOS(有 brew):
- 然后更新扩展:
- 无扩展名:
UPDATE EXTENSIONS; - 有扩展名:
UPDATE EXTENSIONS (<name1>, <name2>, ...);示例:"$DUCKDB" :memory: -c "UPDATE EXTENSIONS;"或"$DUCKDB" :memory: -c "UPDATE EXTENSIONS (<ext1>, <ext2>, ...);"
- 无扩展名:
- 先检查 DuckDB CLI 是否最新:
- 安装模式:解析每个剩余参数。若包含 @,按 @ 拆分为
-
调用完成后报告成功或失败。
适用场景
- 需要为 DuckDB 安装核心或社区扩展时。
- 需要批量更新已安装的 DuckDB 扩展时。
- 需要同时检查并升级 DuckDB CLI 版本时。
限制
- 依赖已安装的 DuckDB CLI;未安装时不会自动安装,而是提示用户手动安装后重新运行。
- 更新模式下升级 DuckDB CLI 需要用户确认。
- 平台升级命令依赖对应包管理器(brew、winget)或安装脚本。
- 关于扩展的具体来源、可用仓库列表、网络要求等细节,资料中暂未提供。