Database Migrations¶
Overview¶
The project uses Alembic for database migrations with PostgreSQL.
Basic Commands¶
# Show current migration
uv run alembic current
# Show migration history
uv run alembic history --verbose
# Upgrade to latest
uv run alembic upgrade head
# Downgrade one migration
uv run alembic downgrade -1
# Create new migration
uv run alembic revision --autogenerate -m "description"
Migration Workflow¶
When to Create Migration¶
Create a migration when: 1. Adding new table 2. Adding/modifying column in existing table 3. Adding/modifying index 4. Any schema change
Creating Migration¶
# 1. Ensure model is updated
# 2. Create migration
uv run alembic revision --autogenerate -m "add_recipient_id_to_package"
# 3. Review generated migration in alembic/versions/
# 4. Apply migration
uv run alembic upgrade head
Best Practices¶
- Always review generated migration before applying
- Test migrations on local DB first
- Never modify existing migrations - create new one
- Include rollback logic in upgrade() function
Common Issues¶
Issue: Multiple Heads¶
Symptoms:
Solution:
# Merge heads
uv run alembic merge head1 head2 -m "merge_description"
# Or stamp to specific revision
uv run alembic stamp <revision_id>
Issue: Migration Not Applying¶
Symptoms:
Solution:
# Check if migration is applied
uv run alembic current
# Manually apply specific migration
uv run alembic upgrade <revision>
Migration Files Location¶
Rollback Guidelines¶
For production: 1. Always have rollback script ready 2. Test rollback in staging first 3. Document any data migration steps