Files
alpinebits_python/MIGRATION_FIXES.md
2025-11-19 19:10:25 +01:00

2.3 KiB

Migration Fixes for Production Database Compatibility

Problem

The database migrations were failing when run against a production database dump because:

  1. First migration (630b0c367dcb): Tried to create an index on acked_requests that already existed in the production dump
  2. Third migration (08fe946414d8): Tried to add hashed_customer_id column to reservations without checking if it already existed
  3. Fourth migration (a1b2c3d4e5f6): Tried to modify conversion_guests table before it was guaranteed to exist

Solutions Applied

1. Migration 630b0c367dcb - Initial Migration

Change: Made index creation idempotent by checking if index already exists before creating it

Impact: Allows migration to run even if production DB already has the ix_acked_requests_username index

2. Migration 08fe946414d8 - Add hashed_customer_id to reservations

Change: Added check to skip adding the column if it already exists

Impact:

  • Preserves production data in reservations and hashed_customers tables
  • Makes migration safe to re-run
  • Still performs data migration to populate hashed_customer_id when needed

3. Migration a1b2c3d4e5f6 - Add hashed_customer_id to conversion_guests

Change: Added check to verify conversion_guests table exists before modifying it

Impact: Safely handles the case where table creation in a previous migration succeeded

Data Preservation

All non-conversion tables are preserved:

  • customers: 1095 rows preserved
  • reservations: 1177 rows preserved
  • hashed_customers: 1095 rows preserved
  • acked_requests: preserved

Conversion tables are properly recreated:

  • conversions: created fresh with new schema
  • conversion_rooms: created fresh with new schema
  • conversion_guests: created fresh with composite key

Verification

After running uv run alembic upgrade head:

  • All migrations apply successfully
  • Database is at head revision: a1b2c3d4e5f6
  • All required columns exist (conversion_guests.hashed_customer_id, reservations.hashed_customer_id)
  • Production data is preserved

Reset Instructions

If you need to reset and re-run all migrations:

DELETE FROM alpinebits.alembic_version;

Then run:

uv run alembic upgrade head