# Database Migrations

> Database migration patterns and schema versioning

- Skill: `langchain-ai/database-migrations` (Agent Skill)
- Install (CLI): `npx skillmds@latest add langchain-ai/database-migrations`
- Raw SKILL.md: https://api.skillmd.com/api/skills/langchain-ai/database-migrations/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: langchain-ai (https://skillmd.com/u/langchain-ai)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/langchain-ai/database-migrations

---


# Database Migration Patterns

Manage database schema changes safely and reliably.

## Migration File Structure

```
migrations/
  001_create_users.sql
  002_add_email_index.sql
  003_create_orders.sql
```

## Writing Safe Migrations

### Adding Columns

```sql
-- migrations/004_add_user_status.sql
-- Up
ALTER TABLE users ADD COLUMN status VARCHAR(20) DEFAULT 'active';
CREATE INDEX idx_users_status ON users(status);

-- Down
DROP INDEX idx_users_status;
ALTER TABLE users DROP COLUMN status;
```

### Creating Tables

```sql
-- migrations/005_create_audit_log.sql
-- Up
CREATE TABLE audit_log (
    id SERIAL PRIMARY KEY,
    table_name VARCHAR(100) NOT NULL,
    record_id INTEGER NOT NULL,
    action VARCHAR(20) NOT NULL,
    changed_by INTEGER REFERENCES users(id),
    changed_at TIMESTAMP DEFAULT NOW(),
    old_values JSONB,
    new_values JSONB
);

CREATE INDEX idx_audit_log_table ON audit_log(table_name, record_id);
CREATE INDEX idx_audit_log_time ON audit_log(changed_at);

-- Down
DROP TABLE audit_log;
```

## Best Practices

1. Always include rollback (down) migrations
2. Never modify existing migrations - create new ones
3. Test migrations on a copy of production data
4. Use transactions for atomic changes
5. Add indexes concurrently in production: `CREATE INDEX CONCURRENTLY`

