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

sql-insight — скилл для Claude Code: SQL-анализ и установка

Скилл переводит запросы на обычном языке в SQL, разбирает планы EXPLAIN и ищет типичные проблемы в запросах. Пригодится при работе с SQLite и PostgreSQL.

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

Что делает sql-insight

Для генерации SQL скилл получает структуру базы: таблицы, столбцы, типы, индексы и внешние ключи. Команда schema может добавить примеры строк, а --compact выдаёт краткий текст для контекста агента. Затем optimize проверяет SQL по правилам поиска типичных проблем, а explain разбирает план выполнения и отмечает, например, полное сканирование таблицы или отсутствие индекса.

Внутри — скрипт scripts/sql_query_helper.py с командами schema, optimize и explain. Анализ через optimize не требует подключения к базе; для schema и explain нужен файл SQLite или строка подключения PostgreSQL. Параметр --analyze доступен только для PostgreSQL и действительно выполняет запрос, поэтому применяйте его с учётом этого поведения.

Какие задачи решает

  • перевести вопрос о данных в SQL-запрос
  • найти типичные проблемы в SQL без подключения к базе
  • разобрать план EXPLAIN и обнаружить полное сканирование
  • проверить, где запросу может не хватать индекса

Примеры запросов агенту

  • Составь SQL-запрос для поиска заказов пользователя с ID 100 в data.db.
  • Проверь этот запрос на проблемы: SELECT * FROM orders WHERE user_id = 100.
  • Разбери план выполнения этого запроса в PostgreSQL с помощью EXPLAIN ANALYZE.

Как установить sql-insight

1Через Skills CLI (Vercel)

npx skills add zebbern/claude-code-guide --skill sql-insight -a claude-code

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

~/.claude/skills/sql-insight/SKILL.md

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

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

Вопросы о sql-insight

Как установить sql-insight в Claude Code?

Выполните npx skills add zebbern/claude-code-guide --skill sql-insight -a claude-code. Файл скилла находится по пути ~/.claude/skills/sql-insight/SKILL.md.

Что делает sql-insight?

Он помогает преобразовать описание на обычном языке в SQL, проверить запрос по набору правил и интерпретировать план EXPLAIN для SQLite и PostgreSQL.

Нужна ли база данных для анализа SQL?

Для optimize подключение к базе не требуется. Командам schema и explain нужен доступ к SQLite или PostgreSQL.

Исходный текст

SKILL.md · MIT
---
name: sql-insight
description: "Translate natural language to SQL, optimize query performance, and interpret EXPLAIN plans for SQLite and PostgreSQL. Triggered when users ask to convert questions into SQL, improve slow queries, tune indexes, analyze execution plans, or mention keywords like NL2SQL, query tuning, or full table scan."
license: MIT
---

# sql-insight

SQL query assistant — natural language to SQL translation, query optimization analysis, and EXPLAIN plan interpretation.

## Capabilities

| Feature | Description |
|---------|-------------|
| Schema Extraction | Extracts database table structure (columns, types, indexes, foreign keys, sample data) to provide context for NL→SQL |
| Natural Language → SQL | Translates natural language descriptions into SQL queries using schema context |
| Query Optimization Analysis | Detects SQL anti-patterns based on 13 rules and provides optimization suggestions |
| EXPLAIN Interpretation | Runs EXPLAIN and interprets the query plan, identifying full table scans, missing indexes, and more |

## Workflow

### Natural Language → SQL

1. Use the `schema` command to extract the database table structure
2. Use the schema as context to translate the user's natural language request into SQL
3. Use the `optimize` command to check if the generated SQL can be improved
4. Use the `explain` command to verify the query execution plan

```bash
# Step 1: Extract schema (compact mode, suitable for LLM context)
python3 scripts/sql_query_helper.py --db-path data.db schema --compact

# Step 2: Analyze SQL optimization suggestions
python3 scripts/sql_query_helper.py optimize "SELECT * FROM orders WHERE user_id = 100"

# Step 3: View EXPLAIN execution plan
python3 scripts/sql_query_helper.py --db-path data.db explain "SELECT * FROM orders WHERE user_id = 100"
```

## Quick Start

### Schema Extraction

```bash
# Extract full schema (JSON format, with sample data)
python3 scripts/sql_query_helper.py --db-path data.db schema

# Compact mode (plain text, suitable for embedding in prompts)
python3 scripts/sql_query_helper.py --db-path data.db schema --compact

# Skip data sampling
python3 scripts/sql_query_helper.py --db-path data.db schema --sample-rows 0

# PostgreSQL
python3 scripts/sql_query_helper.py --db-type postgres --dsn "host=localhost dbname=mydb user=reader" schema --compact
```

### Query Optimization Analysis

```bash
# Analyze SQL query (no database connection required, pure rule-based detection)
python3 scripts/sql_query_helper.py optimize "SELECT * FROM orders o, users u WHERE o.user_id = u.id"

python3 scripts/sql_query_helper.py optimize "SELECT name FROM users WHERE UPPER(email) LIKE '%@GMAIL.COM'"

python3 scripts/sql_query_helper.py optimize "SELECT id, (SELECT COUNT(*) FROM orders WHERE user_id = u.id) AS order_count FROM users u"
```

### EXPLAIN Interpretation

```bash
# SQLite EXPLAIN
python3 scripts/sql_query_helper.py --db-path data.db explain "SELECT * FROM orders WHERE user_id = 100"

# PostgreSQL EXPLAIN
python3 scripts/sql_query_helper.py --db-type postgres --dsn "host=localhost dbname=mydb" explain "SELECT * FROM orders WHERE user_id = 100"

# PostgreSQL EXPLAIN ANALYZE (actually executes the query for real-world data)
python3 scripts/sql_query_helper.py --db-type postgres --dsn "host=localhost dbname=mydb" explain --analyze "SELECT * FROM orders WHERE user_id = 100"
```

## Detailed Usage

### Global Parameters

| Parameter | Required | Default | Description |
|-----------|----------|---------|-------------|
| `--db-type` | No | sqlite | Database type: sqlite or postgres |
| `--db-path` | For schema/explain (SQLite) | — | SQLite database file path |
| `--dsn` | For schema/explain (PostgreSQL) | — | PostgreSQL connection string |

### Subcommands

| Command | Requires Database | Description |
|---------|-------------------|-------------|
| `schema` | Yes | Extract database table structure |
| `optimize <sql>` | No | SQL query optimization analysis (pure rule-based detection) |
| `explain <sql>` | Yes | Run EXPLAIN and interpret the plan |

### schema Parameters

| Parameter | Default | Description |
|-----------|---------|-------------|
| `--sample-rows, -n` | 3 | Number of sample rows per table (0 to skip sampling) |
| `--compact` | false | Compact text output (suitable for embedding in prompts) |

### explain Parameters

| Parameter | Default | Description |
|-----------|---------|-------------|
| `--analyze` | false | Use EXPLAIN ANALYZE (PostgreSQL only; actually executes the query) |

## Optimization Rules

The `optimize` command detects the following 13 SQL anti-patterns:

| Rule | Severity | Description |
|------|----------|-------------|
| avoid-select-star | warning | Avoid SELECT *; explicitly list column names |
| unbounded-query | info | Missing WHERE and LIMIT clauses |
| leading-wildcard-like | warning | LIKE '%...' causes index to be bypassed |
| or-condition | info | OR conditions may prevent index usage |
| not-in-subquery | warning | NOT IN (subquery) has poor performance |
| scalar-subquery | warning | Scalar subqueries in SELECT execute row-by-row |
| function-on-column | warning | Functions on columns in WHERE prevent index usage |
| implicit-join | info | Implicit joins (comma-separated tables) are less readable |
| distinct-usage | info | DISTINCT may mask JOIN duplication issues |
| order-without-limit | info | ORDER BY without LIMIT |
| deep-nesting | warning | Deeply nested subqueries |
| having-without-group | warning | HAVING without GROUP BY |
| not-equal-filter | info | != conditions cannot effectively use indexes |

## EXPLAIN Interpretation Items

| Check | Applicable Database | Description |
|-------|---------------------|-------------|
| Full table scan | SQLite / PostgreSQL | Detects Seq Scan / SCAN TABLE |
| Auto temporary index | SQLite | SQLite auto-creates a temporary index, indicating a missing permanent index |
| Covering index | SQLite / PostgreSQL | Index contains all queried columns; no table lookup needed |
| Disk sort | PostgreSQL | Sort operation spills to disk |
| Nested loop join | PostgreSQL | Nested loop joins on large tables have poor performance |
| Row estimate deviation | PostgreSQL (ANALYZE) | Estimated rows differ from actual rows by more than 10x |

## Output Examples

### schema --compact

```
-- Database: sqlite
-- users (1500 rows): id INTEGER  PK, name TEXT, email TEXT, age INTEGER, created_at TEXT
--   IDX(unique): idx_users_email on (email)
-- orders (8200 rows): id INTEGER  PK, user_id INTEGER, amount REAL, status TEXT, created_at TEXT
--   FK: user_id -> users.id
--   IDX: idx_orders_user_id on (user_id)
```

### optimize

```json
{
  "sql": "SELECT * FROM orders o, users u WHERE o.user_id = u.id",
  "issues": [
    {
      "severity": "warning",
      "rule": "avoid-select-star",
      "message": "Avoid SELECT *: only select the columns you need to reduce I/O and network transfer",
      "suggestion": "Replace SELECT * with an explicit list of required column names"
    },
    {
      "severity": "info",
      "rule": "implicit-join",
      "message": "Uses implicit join (comma-separated tables), which is less readable and error-prone",
      "suggestion": "Use explicit JOIN ... ON syntax for better readability and maintainability"
    }
  ]
}
```

### explain (SQLite)

```json
{
  "db_type": "sqlite",
  "query": "SELECT * FROM orders WHERE user_id = 100",
  "plan": [
    {"id": 2, "parent": 0, "detail": "SEARCH orders USING INDEX idx_orders_user_id (user_id=?)"}
  ],
  "interpretation": [
    {
      "severity": "ok",
      "type": "index-search",
      "detail": "Index lookup: idx_orders_user_id",
      "suggestion": "Index lookup is efficient"
    }
  ]
}
```

## Safety Mechanisms

- **Read-only connections**: SQLite uses `?mode=ro`; PostgreSQL uses `SET SESSION READ ONLY`
- **SQL whitelist**: Only allows statements starting with SELECT / WITH / EXPLAIN
- **Dangerous keyword blocking**: INSERT, UPDATE, DELETE, DROP, and 30+ other keywords are blocked
- **Multi-statement blocking**: Semicolon-separated multiple SQL statements are rejected
- **Identifier escaping**: Table names are double-quote escaped to prevent SQL injection

## Dependencies

- Python 3.8+ (`sqlite3` is a built-in module)
- PostgreSQL support requires: `pip install psycopg2-binary`
- The `optimize` command requires no database connection and has zero external dependencies

© zebbern · MIT · zebbern/claude-code-guide

Похожие скиллы

Все скиллы по теме «Данные и базы» →
xlsx официальный anthropics Работает с табличными файлами: создаёт, читает, правит и преобразует книги. Подходит, когда итогом должен стать файл Excel или другой табличный формат. 187 223установок google-agents-cli-observability официальный Google Помогает настроить трассировку и сбор данных о работе ИИ-агентов, включая агентов на ADK. Пригодится, когда нужно разбирать выполнение запросов или наблюдать за агентом после развёртывания. CX Codex +1 511 300установок caveman-evidence-review JuliusBrussee Скилл читает данные Caveman Cloud о расходах LLM, трассах и маршрутизации. Подходит для проверки того, куда уходит бюджет проекта. CX Codex +1 104 500установок migration JuliusBrussee Скилл задаёт правила безопасных миграций схем, данных и API с обязательным откатом. Пригодится при изменениях, где нельзя терять данные или ломать совместимость. CX Codex +1 103 900установок performance-optimization addyosmani Скилл для агентов ИИ-кодинга: сначала замеряет, потом чинит узкое место — от Core Web Vitals до N+1 запросов и индексов в базе. CX Codex +1 65 200установок supabase официальный supabase Скилл помогает настраивать базу данных, аутентификацию и RLS в Supabase без скрытых дыр в безопасности. CX Codex GP ChatGPT 8установок

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

secure-code-review Скилл прогоняет код по всем десяти категориям OWASP Top 10 и выдаёт отчёт с примерами уязвимостей и готовыми исправлениями. Пригодится перед релизом или ревью чужого проекта. CX Codex +1 ★ 4 679звёзд репо scanning-tools Скилл помогает выбрать и применять инструменты для проверки сетей, веб-приложений и систем на уязвимости. Пригодится для планирования сканирования и подготовки отчётов. CX Codex +1 ★ 4 679звёзд репо route-to-openapi Сканирует определения маршрутов в исходниках и собирает спецификацию OpenAPI 3.0.3. Пригодится, когда документация API нужна, а писать её руками не хочется. CX Codex +1 ★ 4 679звёзд репо regression-modeler Считает линейную или логистическую регрессию по вашей таблице и объясняет коэффициенты простыми словами. Пригодится, когда надо проверить значимость признаков без ручного кода. CX Codex +1 ★ 4 679звёзд репо r2-upload Загружает файлы в Cloudflare R2, AWS S3 и совместимые хранилища, затем создаёт временную ссылку на скачивание. Пригодится, когда нужно передать файл по ссылке с ограниченным сроком действия. CX Codex +1 ★ 4 679звёзд репо project-sizing-guide Считает трудозатраты по PERT, T-shirt sizing и Function Point Analysis. Пригодится, когда нужно ответить, сколько займёт фича. CX Codex +1 ★ 4 679звёзд репо playwright-skill Даёт агенту рекомендации по тестам Playwright: от выбора локаторов до отладки и настройки CI. Пригодится для E2E, API и компонентных проверок. CX Codex +1 ★ 4 679звёзд репо pipeline-blueprint Скилл собирает пайплайны для GitHub Actions и GitLab CI под тип проекта: фронтенд, бэкенд, библиотека, монорепозиторий. Пригодится, когда CI ещё нет или он разросся. CX Codex +1 ★ 4 679звёзд репо

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

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