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

database-migration · bobmatnyc — скилл для Claude Code

Помогает безопасно менять схемы баз данных в проде без даунтайма. Скилл даёт шаблоны фазовых миграций, деревья решений и инструкции по откату.

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

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

Скилл обучает агента пяти базовым принципам миграций: обратная совместимость, обратимость, предварительное тестирование, поэтапность и нулевой простой. Вместо опасных прямых правок вроде добавления обязательного поля через ALTER TABLE он направляет модель на паттерн expand-contract: сначала добавить nullable-колонку, настроить двойную запись в коде, долить старые данные, сделать поле обязательным и лишь затем удалить устаревшие атрибуты.

Внутри собраны готовые примеры SQL для переименования колонок, конвертации типов данных и добавления внешних ключей. Для PostgreSQL скилл настаивает на выполнении CREATE INDEX CONCURRENTLY на больших таблицах, чтобы избежать блокировки чтения и записи. Для популярных экосистем предложены команды под Alembic в Python, Knex в JavaScript и генераторы миграций Rails.

Прямая миграция с блокировкой таблицы в проде гарантированно уронит сервис под нагрузкой, поэтому многофазный подход здесь строго обязателен. При авариях руководство предлагает готовые пути восстановления: откат через reverse-миграции, исправление накатом или устранение рассинхронизации схемы через автогенерацию.

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

  • Переименовать колонку в рабочей базе данных без остановки сервиса
  • Добавить индекс на таблицу с миллионами строк через CONCURRENTLY
  • Спланировать безопасный откат изменений схемы в случае сбоя
  • Подобрать инструмент миграций под стек проекта

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

  • Спланируй безопасную миграцию: нужно разделить поле full_name на first_name и last_name без простоя
  • Напиши скрипт для Alembic, чтобы добавить внешний ключ в таблицу orders
  • Как безопасно переименовать колонку email в PostgreSQL на проде?

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

1Через Skills CLI (Vercel)

npx skills add bobmatnyc/claude-mpm-skills --skill database-migration -a claude-code

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

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

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

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

Вопросы о database-migration

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

Выполните npx skills add bobmatnyc/claude-mpm-skills --skill database-migration -a claude-code. Файл запишется по пути ~/.claude/skills/database-migration/SKILL.md.

Что делает скилл database-migration?

Он задаёт ИИ-агенту правила и готовые SQL-паттерны для поэтапного обновления схем баз данных без блокировки таблиц и прерывания работы приложения.

Как скилл предотвращает блокировку таблиц при добавлении обязательного поля?

Он разбивает операцию на этапы: сначала колонка создаётся со значением NULL, данные заполняются фоном, а ограничение NOT NULL накладывается отдельным шагом после релиза нового кода.

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

SKILL.md · MIT
---
name: database-migration
description: Safe patterns for evolving database schemas in production with decision trees and troubleshooting guidance.
user-invocable: false
disable-model-invocation: true
updated_at: 2025-12-03T00:00:00Z
tags: [database, migration, schema, production, decision-trees, troubleshooting, zero-downtime]
progressive_disclosure:
  entry_point:
    summary: "Safe patterns for evolving database schemas in production with decision trees and troubleshooting guidance."
    when_to_use: "When working with data, databases, or data transformations."
    quick_start: "1. Review the core concepts below. 2. Apply patterns to your use case. 3. Follow best practices for implementation."
  references:
    - decision-trees.md
    - troubleshooting.md
---
# Database Migration

Safe patterns for evolving database schemas in production.

## Migration Principles

1. **Backward compatible** - New code works with old schema
2. **Reversible** - Can rollback if needed
3. **Tested** - Verify on staging before production
4. **Incremental** - Small changes, not big-bang
5. **Zero downtime** - No service interruption

## Safe Migration Pattern

### Phase 1: Add New (Compatible)
```sql
-- Add new column (nullable initially)
ALTER TABLE users ADD COLUMN full_name VARCHAR(255) NULL;

-- Deploy new code that writes to both old and new
UPDATE users SET full_name = CONCAT(first_name, ' ', last_name);
```

### Phase 2: Migrate Data
```sql
-- Backfill existing data
UPDATE users
SET full_name = CONCAT(first_name, ' ', last_name)
WHERE full_name IS NULL;
```

### Phase 3: Make Required
```sql
-- Make column required
ALTER TABLE users ALTER COLUMN full_name SET NOT NULL;
```

### Phase 4: Remove Old (After New Code Deployed)
```sql
-- Remove old columns
ALTER TABLE users DROP COLUMN first_name;
ALTER TABLE users DROP COLUMN last_name;
```

## Common Migrations

### Adding Index
```sql
-- Create index concurrently (PostgreSQL)
CREATE INDEX CONCURRENTLY idx_users_email ON users(email);
```

### Renaming Column
```sql
-- Phase 1: Add new column
ALTER TABLE users ADD COLUMN email_address VARCHAR(255);

-- Phase 2: Copy data
UPDATE users SET email_address = email;

-- Phase 3: Drop old column (after deploy)
ALTER TABLE users DROP COLUMN email;
```

### Changing Column Type
```sql
-- Phase 1: Add new column with new type
ALTER TABLE products ADD COLUMN price_cents INTEGER;

-- Phase 2: Migrate data
UPDATE products SET price_cents = CAST(price * 100 AS INTEGER);

-- Phase 3: Drop old column
ALTER TABLE products DROP COLUMN price;
ALTER TABLE products RENAME COLUMN price_cents TO price;
```

### Adding Foreign Key
```sql
-- Add column first
ALTER TABLE orders ADD COLUMN user_id INTEGER NULL;

-- Populate data
UPDATE orders SET user_id = (
    SELECT id FROM users WHERE users.email = orders.user_email
);

-- Add foreign key
ALTER TABLE orders
ADD CONSTRAINT fk_orders_users
FOREIGN KEY (user_id) REFERENCES users(id);
```

## Migration Tools

### Python (Alembic)
```python
# Generate migration
alembic revision --autogenerate -m "add user full_name"

# Apply migration
alembic upgrade head

# Rollback
alembic downgrade -1
```

### JavaScript (Knex)
```javascript
// Create migration
knex migrate:make add_full_name

// Apply migrations
knex migrate:latest

// Rollback
knex migrate:rollback
```

### Rails
```ruby
# Generate migration
rails generate migration AddFullNameToUsers full_name:string

# Run migrations
rails db:migrate

# Rollback
rails db:rollback
```

## Testing Migrations

```python
def test_migration_forward_backward():
    # Apply migration
    apply_migration("add_full_name")

    # Verify schema
    assert column_exists("users", "full_name")

    # Rollback
    rollback_migration()

    # Verify rollback
    assert not column_exists("users", "full_name")
```

## Dangerous Operations

### ❌ Avoid in Production
```sql
-- Locks table for long time
ALTER TABLE users ADD COLUMN email VARCHAR(255) NOT NULL;

-- Can't rollback
DROP TABLE old_users;

-- Breaks existing code immediately
ALTER TABLE users DROP COLUMN email;
```

### ✅ Safe Alternatives
```sql
-- Add as nullable first
ALTER TABLE users ADD COLUMN email VARCHAR(255) NULL;

-- Rename instead of drop
ALTER TABLE old_users RENAME TO archived_users;

-- Keep old column until new code deployed
-- (multi-phase approach)
```

## Rollback Strategy

```sql
-- Every migration needs DOWN
-- UP
ALTER TABLE users ADD COLUMN full_name VARCHAR(255);

-- DOWN
ALTER TABLE users DROP COLUMN full_name;
```

## Decision Support

### Quick Decision Guide

**Making a schema change?**
- Breaking change (drops/modifies data) → Multi-phase migration (expand-contract)
- Additive change (new columns/tables) → Single-phase migration
- Large table (millions of rows) → Use CONCURRENTLY for indexes

**Need zero downtime?**
- Schema change → Expand-contract pattern (5 phases)
- Data migration (< 10k rows) → Synchronous in-migration
- Data migration (> 1M rows) → Background worker pattern

**Planning rollback?**
- Added new schema only → Simple DOWN migration
- Modified/removed schema → Multi-phase rollback or fix forward
- Cannot lose data → Point-in-time recovery (PITR)

**Choosing migration tool?**
- Python/Django → Django Migrations
- Python/SQLAlchemy → Alembic
- Node.js/TypeScript → Prisma Migrate or Knex.js
- Enterprise/multi-language → Flyway or Liquibase

**→ See [references/decision-trees.md](./references/decision-trees.md) for comprehensive decision frameworks**

## Troubleshooting

### Common Issues Quick Reference

**Migration failed halfway** → Check database state, fix forward with repair migration

**Schema drift detected** → Use autogenerate to create reconciliation migration

**Cannot rollback (no downgrade)** → Create reverse migration or fix forward

**Foreign key violation** → Clean data before adding constraint, or add as NOT VALID

**Migration locks table too long** → Use CONCURRENTLY, add columns in phases, batch updates

**Circular dependency** → Create merge migration or reorder dependencies

**→ See [references/troubleshooting.md](./references/troubleshooting.md) for detailed solutions with examples**

## Navigation

### Detailed References

- **[🌳 Decision Trees](./references/decision-trees.md)** - Schema migration strategies, zero-downtime patterns, rollback strategies, migration tool selection, and data migration approaches. Load when planning migrations or choosing strategies.

- **[🔧 Troubleshooting](./references/troubleshooting.md)** - Failed migration recovery, schema drift detection, migration conflicts, rollback failures, data integrity issues, and performance problems. Load when debugging migration issues.

## Remember
- Test migrations on copy of production data
- Have rollback plan ready
- Monitor during deployment
- Communicate with team about schema changes
- Keep migrations small and focused

© bobmatnyc · MIT · bobmatnyc/claude-mpm-skills

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

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

Сначала — database-migration от других авторов.

database-migration Seth Hobson Скилл помогает менять схемы и переносить данные через Sequelize, TypeORM и Prisma. Подходит для миграций без остановки приложения и продуманного отката. CX Codex 17 549установок 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установок

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

golang-cli-cobra-viper Скилл для сборки консольных утилит на Go: структура команд через Cobra и конфигурация из флагов, переменных окружения и файлов через Viper. CX Codex +1 425установок dependency-audit Скилл для ревизии зависимостей: находит устаревшие пакеты, уязвимости и мусор, который давно никто не импортирует. CX Codex +1 422установок wordpress-plugin-fundamentals Скилл для разработки плагинов WordPress на PHP 8.3+ с ООП, хуками, работой с базой и Settings API. Пригодится, когда агенту нужно собрать структуру плагина, а не писать её с нуля. CX Codex +1 421установок digitalocean-compute Подсказывает агенту, что выбрать в DigitalOcean под задачу: Droplets, App Platform, Functions, DOKS или GPU. Пригодится, когда решаешь, куда деплоить приложение или контейнер. CX Codex +1 416установок wordpress-testing-qa Скилл для тестирования плагинов и тем WordPress: PHPUnit-интеграция, WP_Mock, PHPCS и CI/CD. Пригодится, когда нужно навести порядок в тестах. CX Codex +1 413установок hono-testing Скилл описывает, как писать юнит- и интеграционные тесты для приложений на Hono: запросы через app.request(), типизированный тест-клиент и подмена окружения. CX Codex +1 411установок golang-observability-opentelemetry Скилл для инструментирования Go-сервисов: OpenTelemetry для распределённых трейсов, Prometheus для метрик, slog для структурных логов. CX Codex +1 409установок digitalocean-overview Скилл помогает освоить DigitalOcean, выбрать сервисы и настроить работу через Control Panel, doctl, REST API или Terraform. CX Codex +1 408установок

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

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