migration-helper
Assists in creating database migrations for Polibase. Activates when creating migration files, modifying database schema, or adding tables/columns/indexes. Ensures sequential numbering, proper naming, and mandatory addition to 02_run_migrations.sql to prevent inconsistent database states.
- Category: discovered
- Tags: github, community
- Version: 1.0.0
- Author: walid
- Downloads: 0
- Updated: 2025-11-22
Download the latest version (v1.0.0) from this page.
SKILL.md
---
name: migration-helper
description: Assists in creating database migrations for Polibase. Activates when creating migration files, modifying database schema, or adding tables/columns/indexes. Ensures sequential numbering, proper naming, and mandatory addition to 02_run_migrations.sql to prevent inconsistent database states.
---
# Migration Helper
## Purpose
Assist in creating database migrations following Polibase conventions and ensure proper integration with the migration system.
## When to Activate
This skill activates automatically when:
- Creating new migration files
- Modifying database schema
- Adding tables, columns, indexes, or constraints
- User mentions "migration", "schema", or "database change"
## ⚠️ CRITICAL: Mandatory Steps
**NEVER skip these steps when creating a migration:**
1. **Find Latest Number**: Check `database/migrations/` for highest number
2. **Create Migration File**: `database/migrations/XXX_description.sql`
3. **⚠️ UPDATE RUN SCRIPT**: Add to `database/02_run_migrations.sql` (MANDATORY!)
4. **Test Migration**: Run `./reset-database.sh` to verify
**Skipping step 3 causes inconsistent database states!**
## Quick Checklist
Before completing a migration:
- [ ] **Sequential Number**: Incremented from latest migration
- [ ] **File Created**: In `database/migrations/XXX_description.sql`
- [ ] **⚠️ Run Script Updated**: Added to `database/02_run_migrations.sql`
- [ ] **Idempotent**: Uses `IF NOT EXISTS`/`IF EXISTS`
- [ ] **Comments**: Header and column comments included
- [ ] **Indexes**: Created for foreign keys and query columns
- [ ] **Tested**: Ran `./reset-database.sh` successfully
## Migration Naming
Format: `{number}_{description}.sql`
Examples:
- `013_create_llm_processing_history.sql`
- `014_add_email_to_politicians.sql`
- `015_create_index_on_speakers_name.sql`
Guidelines:
- Use descriptive names with action verbs
- Use snake_case
- Keep concise but clear
## Common Patterns
### Add Table
```sql
CREATE TABLE IF NOT EXISTS table_name (
id SERIAL PRIMARY KEY,
...
);
```
### Add Column
```sql
ALTER TABLE table_name
ADD COLUMN IF NOT EXISTS column_name type;
```
### Add Index
```sql
CREATE INDEX IF NOT EXISTS idx_table_column
ON table_name(column_name);
```
See [examples.md](examples.md) for detailed patterns.
## Templates
Use templates in `templates/` directory for:
- New table creation
- Column addition
- Index creation
- Foreign key addition
- Enum type creation
## Detailed Reference
For comprehensive migration patterns and SQL details, see [reference.md](reference.md).
## Testing
```bash
# Reset database with all migrations
./reset-database.sh
# Verify migration applied
docker compose -f docker/docker-compose.yml [-f docker/docker-compose.override.yml] exec postgres \
psql -U sagebase_user -d sagebase_db \
-c "\d table_name"
```
## Common Pitfalls
1. **❌ Forgetting 02_run_migrations.sql**: Most common mistake!
2. **❌ Non-idempotent SQL**: Use `IF NOT EXISTS`
3. **❌ Missing data migration**: Update existing rows before adding NOT NULL
4. **❌ Breaking foreign keys**: Drop constraints before dropping tables
See [reference.md](reference.md) for detailed pitfall explanations.