attach-db — скилл для Claude Code: подключить базу DuckDB
Подключает файл базы DuckDB к сессии, разбирает схему и сохраняет состояние, чтобы следующие запросы работали сразу.
npx skills add duckdb/duckdb-skills --skill attach-db -a claude-codeЧто делает attach-db
Скилл принимает путь к файлу .duckdb, проверяет, что он существует, и убеждается, что в системе стоит duckdb. Дальше он читает список таблиц, для каждой из них до 20 штук собирает колонки и число строк. Если файла нет, скилл спросит, создавать ли пустую базу.
Найденная схема уходит в общий файл state.sql — один на проект, его используют все скиллы набора. Скилл дописывает в конец ATTACH IF NOT EXISTS и USE, ничего не перезаписывая, потому что там уже могут лежать макросы и секреты от других скиллов. Место хранения выбираете сами: папка проекта .duckdb-skills/ или ~/.duckdb-skills/<project-id>/. В первом случае скилл предложит добавить папку в .gitignore.
В конце он проверяет, что duckdb -init "$STATE_DIR/state.sql" -c "SHOW TABLES;" отрабатывает, и печатает сводку: путь, алиас, таблицы. Без установленного duckdb шаги не пройдут — скилл передаст управление /duckdb-skills:install-duckdb. Битый или не-DuckDB файл он распознаёт на проверке PRAGMA version и останавливается.
Какие задачи решает
- подключить файл
.duckdbк интерактивным запросам - узнать таблицы, колонки и число строк в базе
- сохранить подключение между сессиями через
state.sql - создать пустую базу, если файла ещё нет
- не потерять макросы и секреты из общего файла состояния
Примеры запросов агенту
- подключи базу
data/events.duckdbи покажи, что в ней есть - присоедини
sales.duckdb, сохрани состояние в папке проекта - покажи таблицы и число строк в подключённой базе
Как установить attach-db
1Через Skills CLI (Vercel)
npx skills add duckdb/duckdb-skills --skill attach-db -a claude-code2Вручную: положить файлы
~/.claude/skills/attach-db/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/attach-db/
1Через Skills CLI (Vercel)
npx skills add duckdb/duckdb-skills --skill attach-db -a codex2Вручную: положить файлы
.agents/skills/attach-db/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add duckdb/duckdb-skills --skill attach-db -a cursor2Вручную: положить файлы
.cursor/skills/attach-db/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install duckdb/duckdb-skills attach-db2Вручную: положить файлы
.github/skills/attach-db/SKILL.md1Через Skills CLI (Vercel)
npx skills add duckdb/duckdb-skills --skill attach-db -a gemini-cli2Командой платформы
gemini skills install https://github.com/duckdb/duckdb-skills --path skills/attach-dbВручную: положить файлы
.devin/skills/attach-db/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add duckdb/duckdb-skills --skill attach-db -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Из того же набора6
Похожие
Рядом в теме «Данные и базы»
Все скиллы по теме «Данные и базы» →Вопросы о attach-db
Как установить attach-db в Claude?
Выполните npx skills add duckdb/duckdb-skills --skill attach-db -a claude-code. Скилл появится в ~/.claude/skills/attach-db/SKILL.md.
Что делает attach-db?
Подключает файл DuckDB, разбирает схему таблиц и дописывает ATTACH в общий state.sql, чтобы следующие запросы восстанавливали сессию через duckdb -init.
Что нужно, чтобы скилл сработал?
Установленный duckdb в системе. Если его нет, скилл передаст управление /duckdb-skills:install-duckdb и продолжит после установки.
Исходный текст
SKILL.md · MIT
--- name: attach-db description: > Attach a DuckDB database file for use with /duckdb-skills:query. Explores the schema (tables, columns, row counts) and writes a SQL state file so subsequent queries can restore this session automatically via duckdb -init. argument-hint: <path-to-database.duckdb> allowed-tools: Bash --- You are helping the user attach a DuckDB database file for interactive querying. Database path given: `$0` Follow these steps in order, stopping and reporting clearly if any step fails. **State file convention**: see the "Resolve state directory" section below. All skills share a single `state.sql` file per project. Once resolved, any skill can use it with `duckdb -init "$STATE_DIR/state.sql" -c "<QUERY>"`. ## Step 1 — Resolve the database path If `$0` is a relative path, resolve it against `$PWD` to get an absolute path (`RESOLVED_PATH`). ```bash RESOLVED_PATH="$(cd "$(dirname "$0")" 2>/dev/null && pwd)/$(basename "$0")" ``` Check the file exists: ```bash test -f "$RESOLVED_PATH" ``` - **File exists** -> continue to Step 2. - **File not found** -> ask the user if they want to create a new empty database (DuckDB creates the file on first write). If yes, continue. If no, stop. ## Step 2 — Check DuckDB is installed ```bash command -v duckdb ``` If not found, delegate to `/duckdb-skills:install-duckdb` and then continue. ## Step 3 — Validate the database ```bash duckdb "$RESOLVED_PATH" -c "PRAGMA version;" ``` - **Success** -> continue. - **Failure** -> report the error clearly (e.g. corrupt file, not a DuckDB database) and stop. ## Step 4 — Explore the schema First, list all tables: ```bash duckdb "$RESOLVED_PATH" -csv -c " SELECT table_name, estimated_size FROM duckdb_tables() ORDER BY table_name; " ``` If the database has **no tables**, note that it is empty and skip to Step 5. For each table discovered (up to 20), run: ```bash duckdb "$RESOLVED_PATH" -csv -c " DESCRIBE <table_name>; SELECT count() AS row_count FROM <table_name>; " ``` Collect the column definitions and row counts for the summary. ## Step 5 — Resolve the state directory Check if a state file already exists in either location: ```bash # Option 1: in the project directory test -f .duckdb-skills/state.sql && STATE_DIR=".duckdb-skills" # Option 2: in the home directory, scoped by project root path PROJECT_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || echo "$PWD")" PROJECT_ID="$(echo "$PROJECT_ROOT" | tr '/' '-')" test -f "$HOME/.duckdb-skills/$PROJECT_ID/state.sql" && STATE_DIR="$HOME/.duckdb-skills/$PROJECT_ID" ``` If **neither exists**, ask the user: > Where would you like to store the DuckDB session state for this project? > > 1. **In the project directory** (`.duckdb-skills/state.sql`) — colocated with the project, easy to find. You can choose to gitignore it. > 2. **In your home directory** (`~/.duckdb-skills/<project-id>/state.sql`) — keeps the project directory clean. Based on their choice: **Option 1:** ```bash STATE_DIR=".duckdb-skills" mkdir -p "$STATE_DIR" ``` Then ask: *"Would you like to gitignore `.duckdb-skills/`?"* If yes: ```bash echo '.duckdb-skills/' >> .gitignore ``` **Option 2:** ```bash PROJECT_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || echo "$PWD")" PROJECT_ID="$(echo "$PROJECT_ROOT" | tr '/' '-')" STATE_DIR="$HOME/.duckdb-skills/$PROJECT_ID" mkdir -p "$STATE_DIR" ``` ## Step 6 — Append to the state file `state.sql` is a shared, accumulative init file used by all duckdb-skills. It may already contain macros, LOAD statements, secrets, or other ATTACH statements written by other skills. **Never overwrite it** — always check for duplicates and append. Derive the database alias from the filename without extension (e.g. `my_data.duckdb` → `my_data`). Check if this ATTACH already exists: ```bash grep -q "ATTACH.*RESOLVED_PATH" "$STATE_DIR/state.sql" 2>/dev/null ``` If not already present, append: ```bash cat >> "$STATE_DIR/state.sql" <<'STATESQL' ATTACH IF NOT EXISTS 'RESOLVED_PATH' AS my_data; USE my_data; STATESQL ``` Replace `RESOLVED_PATH` and `my_data` with the actual values. If the alias would conflict with an existing one in the file, ask the user for a name. ## Step 7 — Verify the state file works ```bash duckdb -init "$STATE_DIR/state.sql" -c "SHOW TABLES;" ``` If this fails, fix the state file and retry. ## Step 8 — Report Summarize for the user: - **Database path**: the resolved absolute path - **Alias**: the database alias used in the state file - **State file**: the resolved `STATE_DIR/state.sql` path - **Tables**: name, column count, row count for each table (or note the DB is empty) - Confirm the database is now active for `/duckdb-skills:query` If the database is empty, suggest creating tables or importing data.
© duckdb · MIT · duckdb/duckdb-skills