SuperAPI AI 工具集

install-duckdb

数据与分析

查看项目

更新于 10-15 16:09

技能介绍

用途

install-duckdb 用于安装或更新 DuckDB 扩展。它通过命令行参数接收一个或多个扩展,并调用 DuckDB CLI 执行安装或更新操作。

主要能力

  • 安装扩展:支持两种参数形式。
    • 纯扩展名(name):执行 INSTALL name;,从核心仓库安装。
    • name@repo 形式(例如 magic@community):执行 INSTALL name FROM repo;,从指定仓库安装。
  • 更新扩展:通过 --update 标志进入更新模式。
    • 不带扩展名时更新全部扩展:UPDATE EXTENSIONS;
    • 带扩展名时更新指定扩展:UPDATE EXTENSIONS (<name1>, <name2>, ...);(忽略 @repo 部分)
  • 检查并升级 DuckDB CLI:在更新模式下,先比较当前版本与最新稳定版本。若版本不一致,会询问用户是否升级,并在用户同意后根据平台执行相应升级命令。

使用方式

参数形式为 $@,每个扩展参数为 name 或 name@repo。

执行流程:

  1. 定位 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。
  2. 检查 --update 标志:若参数中包含 --update,则从参数列表中移除并设为更新模式;否则为安装模式。

  3. 构建并运行语句:

    • 安装模式:解析每个剩余参数。若包含 @,按 @ 拆分为 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
      • 然后更新扩展:
        • 无扩展名:UPDATE EXTENSIONS;
        • 有扩展名:UPDATE EXTENSIONS (<name1>, <name2>, ...); 示例: "$DUCKDB" :memory: -c "UPDATE EXTENSIONS;" 或 "$DUCKDB" :memory: -c "UPDATE EXTENSIONS (<ext1>, <ext2>, ...);"
  4. 调用完成后报告成功或失败。

适用场景

  • 需要为 DuckDB 安装核心或社区扩展时。
  • 需要批量更新已安装的 DuckDB 扩展时。
  • 需要同时检查并升级 DuckDB CLI 版本时。

限制

  • 依赖已安装的 DuckDB CLI;未安装时不会自动安装,而是提示用户手动安装后重新运行。
  • 更新模式下升级 DuckDB CLI 需要用户确认。
  • 平台升级命令依赖对应包管理器(brew、winget)或安装脚本。
  • 关于扩展的具体来源、可用仓库列表、网络要求等细节,资料中暂未提供。