# 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: ```sql DELETE FROM alpinebits.alembic_version; ``` Then run: ```bash uv run alembic upgrade head ```