Adjusted the migrations so they work on the prod db

This commit is contained in:
Jonas Linter
2025-11-19 19:10:25 +01:00
parent 661a6e830c
commit 278d082215
5 changed files with 144 additions and 22 deletions

59
MIGRATION_FIXES.md Normal file
View File

@@ -0,0 +1,59 @@
# 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
```