К основному содержанию
скилл CX Codex

attach-db — скилл для Claude Code: подключить базу DuckDB

Подключает файл базы DuckDB к сессии, разбирает схему и сохраняет состояние, чтобы следующие запросы работали сразу.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add duckdb/duckdb-skills --skill attach-db -a claude-code
Открыть на GitHub

Что делает 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-code

2Вручную: положить файлы

~/.claude/skills/attach-db/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/attach-db/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Из того же набора6

Похожие

planetscale-mcp-agent-operating-model planetscale Задаёт правила безопасной работы ИИ-агентов с серверами PlanetScale MCP. Защищает продакшен от прямых изменений и направляет задачи через пулл-реквесты. CX Codex +1 2 400установок planetscale-pscale-cli-automation planetscale Задаёт правила для неинтерактивной работы агентов с CLI PlanetScale через JSON. Пригодится при автоматизации запросов и проверке авторизации в скриптах. CX Codex +1 1 700установок migrate-create ruvnet Создаёт пронумерованные пары SQL-миграций up/down для изменений схемы базы данных. Пригодится при добавлении таблиц, столбцов, индексов и ограничений. CX Codex +1 729установок dbhub bytebase Учит агента сначала изучить схему базы, а потом писать SQL. Пригодится, когда нужно найти таблицу или вытащить данные, не угадывая имена колонок. CX Codex +1 644установок database-design MoizIbnYousaf Скилл по проектированию схем, миграциям и оптимизации запросов для PostgreSQL, MySQL и NoSQL. Пригодится, когда агент пишет SQL. CX Codex +1 604установок mysql sanjay3290 Скилл гоняет SELECT-запросы к нескольким базам MySQL и блокирует любые записи. Пригодится, когда надо посмотреть схему или данные, не рискуя продом. CX Codex +1 420установок

Рядом в теме «Данные и базы»

Все скиллы по теме «Данные и базы» →

Вопросы о 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

Смотрите также

Спонсоры проекта

Компании, которые помогают держать аналитику открытой