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

d1-migration — скилл для Claude Code: миграции Cloudflare D1

Ведёт миграции Cloudflare D1 через Drizzle: генерация SQL, проверка на опасные места, применение к локальной и удалённой базе, починка зависших миграций.

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

Что делает d1-migration

Скилл описывает порядок работы с миграциями D1. Сначала pnpm db:generate создаёт новый .sql в drizzle/, потом файл нужно прочитать глазами. Drizzle иногда разворачивает простое изменение схемы в пересоздание таблицы: CREATE TABLE my_table_new, INSERT INTO ... SELECT с новой колонкой из старой таблицы, DROP TABLE, RENAME. Такой INSERT падает, потому что колонки в старой таблице ещё нет. Если вы только добавляете колонки, файл правят вручную до ALTER TABLE my_table ADD COLUMN. Это повод не запускать db:migrate вслепую.

Дальше миграция идёт в обе базы: pnpm db:migrate:local и pnpm db:migrate:remote. Только локально применять не стоит, иначе получите «локально работает, в продакшене ломается». Проверка — через npx wrangler d1 execute DB_NAME --local --command "PRAGMA table_info(my_table)" и то же с --remote.

Отдельный раздел — зависшие миграции. Если колонка уже добавилась, а запись в d1_migrations не появилась, wrangler повторяет миграцию и спотыкается о дубликат. Лечится ручной вставкой строки в d1_migrations и обычным прогоном остатка. Ещё скилл напоминает про лимит параметров D1: большие multi-row INSERT падают молча, поэтому вставку режут на порции по 10 строк. Для нового проекта порядок другой: сначала деплой воркера, потом npx wrangler d1 create, перенос database_id в wrangler.jsonc, повторный деплой и миграции.

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

  • сгенерировать SQL-миграцию из схемы Drizzle
  • поймать пересоздание таблицы в сгенерированном SQL до применения
  • применить миграцию к локальной и удалённой базе D1
  • починить миграцию, которая применилась частично и застряла
  • разбить большой INSERT на порции из-за лимита параметров D1

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

  • сгенерируй миграцию и покажи SQL, прежде чем применять
  • миграция застряла: колонка есть, а в d1_migrations записи нет — разберись
  • настрой D1 для нового проекта и прогони миграции локально и удалённо

Как установить d1-migration

1Через Skills CLI (Vercel)

npx skills add jezweb/claude-skills --skill d1-migration -a claude-code

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

~/.claude/skills/d1-migration/SKILL.md

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

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

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

design-review Проверяет визуальное качество веб-страницы или приложения и готовит отчёт со скриншотами. Нужен, когда интерфейс выглядит неровно, но причина неясна. CX Codex +1 1 400установок react-patterns Скилл-чеклист по производительности и композиции компонентов React 19 для проектов на Vite и Cloudflare. Пригодится при написании, ревью и рефакторинге. CX Codex +1 1 300установок react-native Набор архитектурных правил и паттернов производительности для React Native и Expo. Помогает агенту оптимизировать списки, настраивать анимации и экраны. CX Codex +1 1 300установок github-release Готовит GitHub-релиз: проверяет код перед публикацией, создаёт тег и выпускает релиз через gh. Нужен перед открытой публикацией репозитория. CX Codex +1 1 300установок proposal-writer Помогает составить коммерческое предложение, смету или SOW для сервисного бизнеса. Пригодится веб-разработчикам, консультантам и агентствам при согласовании условий с клиентом. CX Codex +1 1 200установок shopify-content Создаёт и обновляет контент магазина Shopify через Admin API или автоматизацию браузера. Нужен для страниц, статей, меню, редиректов и SEO-полей. CX Codex +1 1 200установок project-docs Скилл сканирует репозиторий и создаёт актуальные файлы ARCHITECTURE.md, API_ENDPOINTS.md и DATABASE_SCHEMA.md. Он полезен при онбординге новичков или после масштабного рефакторинга. CX Codex +1 1 200установок git-workflow Ведёт агента по операциям Git: подготовке PR, чистке веток, разрешению конфликтов и выпуску тегов в монорепозитории. CX Codex +1 1 200установок

Похожие

cloudflare-d1 alinaqi Помогает агенту писать код под Cloudflare D1: схема Drizzle, миграции через Wrangler и воркер на Hono. Пригодится, когда проект уже крутится на Workers. CX Codex +1 311установок drizzle-orm-d1 secondsky Скилл для работы с Cloudflare D1 через Drizzle ORM: схемы, типизированные запросы, миграции Drizzle Kit и разбор типовых ошибок D1. CX Codex +1 416установок cloudflare-development Mindrally Скилл с правилами разработки на edge-платформе Cloudflare: Workers, Pages, KV, D1, R2 и Durable Objects. Пригодится, когда агент пишет код для воркеров или настраивает wrangler.toml. CX Codex +1 689установок cloudflare-email-service cloudflare Скилл для работы с Cloudflare Email Sending и Email Routing: помогает настроить отправку и приём писем в Workers. CX Codex +1 102 300установок cloudflare-r2 devops-skills Помогает управлять хранилищем Cloudflare R2, настраивать бакеты через Wrangler, генерировать подписанные ссылки и связывать данные с Cloudflare Workers. CX Codex +1 335установок cloudflare-pages devops-skills Разворачивает статические сайты и fullstack-приложения на Cloudflare Pages. Помогает настроить edge-функции и превью для веток. CX Codex +1 331установок

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

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

Вопросы о d1-migration

Как установить d1-migration в Claude?

Выполните npx skills add jezweb/claude-skills --skill d1-migration -a claude-code. Скилл встанет в ~/.claude/skills/d1-migration/SKILL.md.

Что делает d1-migration?

Проводит по шагам миграции Cloudflare D1 с Drizzle ORM: генерация, чтение SQL, применение к локальной и удалённой базе, проверка через wrangler d1 execute.

Почему миграция D1 зависает и как это исправить?

Колонка добавилась, но запись в d1_migrations не появилась, и wrangler падает на дубликате. Нужно вручную вставить строку в d1_migrations и прогнать оставшиеся миграции.

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

SKILL.md · MIT
---
name: d1-migration
description: "Cloudflare D1 migration workflow: generate with Drizzle, inspect SQL for gotchas, apply to local and remote, fix stuck migrations, handle partial failures. Use when running migrations, fixing migration errors, or setting up D1 schemas."
compatibility: claude-code-only
---

# D1 Migration Workflow

Guided workflow for Cloudflare D1 database migrations using Drizzle ORM.

## Standard Migration Flow

### 1. Generate Migration

```bash
pnpm db:generate
```

This creates a new `.sql` file in `drizzle/` (or your configured migrations directory).

### 2. Inspect the SQL (CRITICAL)

**Always read the generated SQL before applying.** Drizzle sometimes generates destructive migrations for simple schema changes.

#### Red Flag: Table Recreation

If you see this pattern, the migration will likely fail:

```sql
CREATE TABLE `my_table_new` (...);
INSERT INTO `my_table_new` SELECT ..., `new_column`, ... FROM `my_table`;
--                                      ^^^ This column doesn't exist in old table!
DROP TABLE `my_table`;
ALTER TABLE `my_table_new` RENAME TO `my_table`;
```

**Cause**: Changing a column's `default` value in Drizzle schema triggers full table recreation. The INSERT SELECT references the new column from the old table.

**Fix**: If you're only adding new columns (no type/constraint changes on existing columns), simplify to:

```sql
ALTER TABLE `my_table` ADD COLUMN `new_column` TEXT DEFAULT 'value';
```

Edit the `.sql` file directly before applying.

### 3. Apply to Local

```bash
pnpm db:migrate:local
# or: npx wrangler d1 migrations apply DB_NAME --local
```

### 4. Apply to Remote

```bash
pnpm db:migrate:remote
# or: npx wrangler d1 migrations apply DB_NAME --remote
```

**Always apply to BOTH local and remote before testing.** Local-only migrations cause confusing "works locally, breaks in production" issues.

### 5. Verify

```bash
# Check local
npx wrangler d1 execute DB_NAME --local --command "PRAGMA table_info(my_table)"

# Check remote
npx wrangler d1 execute DB_NAME --remote --command "PRAGMA table_info(my_table)"
```

## Fixing Stuck Migrations

When a migration partially applied (e.g. column was added but migration wasn't recorded), wrangler retries it and fails on the duplicate column.

**Symptoms**: `pnpm db:migrate` errors on a migration that looks like it should be done. `PRAGMA table_info` shows the column exists.

### Diagnosis

```bash
# 1. Verify the column/table exists
npx wrangler d1 execute DB_NAME --remote \
  --command "PRAGMA table_info(my_table)"

# 2. Check what migrations are recorded
npx wrangler d1 execute DB_NAME --remote \
  --command "SELECT * FROM d1_migrations ORDER BY id"
```

### Fix

```bash
# 3. Manually record the stuck migration
npx wrangler d1 execute DB_NAME --remote \
  --command "INSERT INTO d1_migrations (name, applied_at) VALUES ('0013_my_migration.sql', datetime('now'))"

# 4. Run remaining migrations normally
pnpm db:migrate
```

### Prevention

- `CREATE TABLE IF NOT EXISTS` — safe to re-run
- `ALTER TABLE ADD COLUMN` — SQLite has no `IF NOT EXISTS` variant; check column existence first or use try/catch in application code
- **Always inspect generated SQL** before applying (Step 2 above)

## Bulk Insert Batching

D1's parameter limit causes silent failures with large multi-row INSERTs. Batch into chunks:

```typescript
const BATCH_SIZE = 10;
for (let i = 0; i < allRows.length; i += BATCH_SIZE) {
  const batch = allRows.slice(i, i + BATCH_SIZE);
  await db.insert(myTable).values(batch);
}
```

**Why**: D1 fails when rows x columns exceeds ~100-150 parameters.

## Column Naming

| Context | Convention | Example |
|---------|-----------|---------|
| Drizzle schema | camelCase | `caseNumber: text('case_number')` |
| Raw SQL queries | snake_case | `UPDATE cases SET case_number = ?` |
| API responses | Match SQL aliases | `SELECT case_number FROM cases` |

## New Project Setup

When creating a D1 database for a new project, follow this order:

1. **Deploy Worker first** — `npm run build && npx wrangler deploy`
2. **Create D1 database** — `npx wrangler d1 create project-name-db`
3. **Copy database_id** to `wrangler.jsonc` `d1_databases` binding
4. **Redeploy** — `npx wrangler deploy`
5. **Run migrations** — apply to both local and remote

© jezweb · MIT · jezweb/claude-skills

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

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

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