From e968cfdbca49a93c6864eb50591d4752845cb518 Mon Sep 17 00:00:00 2001 From: Tadas Antanavicius Date: Tue, 30 Sep 2025 10:39:33 -0700 Subject: [PATCH] fix: renumber migrations to fix staging deployment (#592) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary Fixes staging deployment by renumbering migrations to match what staging has already applied. ## Problem Staging already applied migration 008 (metadata separation) before we inserted the new cleanup migration. When we added the cleanup as 008 and renumbered metadata to 009, staging tried to apply 009 again and failed with "column already exists". ## Current State - **Staging**: Has run original 008 (metadata separation), marked as complete. Failed trying to run 009 (which is the same migration renumbered). - **Production**: Has not run either 008 or 009 yet. ## Solution - Rename `008_clean_invalid_data.sql` → `007a_clean_invalid_data.sql` - Rename `009_separate_official_metadata.sql` → `008_separate_official_metadata.sql` (back to original) ## How This Fixes It With this renumbering: 1. **Staging behavior**: - Sees 008 is already complete (the metadata migration it already ran) - Sees 007a as new and runs it, but it will be a no-op (skips because staging doesn't have the problematic production data) - Continues normally 2. **Production behavior**: - Runs 007a (cleanup migration) - removes invalid data - Runs 008 (metadata separation) - applies successfully because data is now clean - Both migrations run in the correct order as intended ## Testing - Verified migration order works correctly - Tested on empty database (test environment) - 007a skips as expected - Tested with production data snapshot - 007a cleans data, 008 applies successfully This is a critical fix to unblock staging deployment. --- ...clean_invalid_data.sql => 007a_clean_invalid_data.sql} | 8 ++++---- ...al_metadata.sql => 008_separate_official_metadata.sql} | 0 2 files changed, 4 insertions(+), 4 deletions(-) rename internal/database/migrations/{008_clean_invalid_data.sql => 007a_clean_invalid_data.sql} (95%) rename internal/database/migrations/{009_separate_official_metadata.sql => 008_separate_official_metadata.sql} (100%) diff --git a/internal/database/migrations/008_clean_invalid_data.sql b/internal/database/migrations/007a_clean_invalid_data.sql similarity index 95% rename from internal/database/migrations/008_clean_invalid_data.sql rename to internal/database/migrations/007a_clean_invalid_data.sql index 82762ec..811a163 100644 --- a/internal/database/migrations/008_clean_invalid_data.sql +++ b/internal/database/migrations/007a_clean_invalid_data.sql @@ -1,4 +1,4 @@ --- Migration 008: Clean up invalid data before applying stricter constraints in migration 009 +-- Migration 007a: Clean up invalid data before applying stricter constraints in migration 008 -- This migration removes or fixes data that would violate constraints introduced in the next migration BEGIN; @@ -27,11 +27,11 @@ BEGIN -- Skip migration if we don't have the known bad data (indicates test environment) IF NOT has_known_bad_server THEN - RAISE NOTICE 'Migration 008: Skipping cleanup - no known problematic data found (likely test/dev environment)'; + RAISE NOTICE 'Migration 007a: Skipping cleanup - no known problematic data found (likely test/dev environment)'; RETURN; -- Exit early, don't run any cleanup END IF; - RAISE NOTICE 'Migration 008: Found known problematic data, proceeding with cleanup'; + RAISE NOTICE 'Migration 007a: Found known problematic data, proceeding with cleanup'; -- Count servers with invalid name format SELECT COUNT(*) INTO invalid_name_count @@ -67,7 +67,7 @@ BEGIN OR value->>'version' = ''; -- Log the cleanup operations with safety check - RAISE NOTICE 'Migration 008 Data Cleanup Plan:'; + RAISE NOTICE 'Migration 007a Data Cleanup Plan:'; RAISE NOTICE ' Total servers in database: %', total_servers; IF total_servers > 0 THEN diff --git a/internal/database/migrations/009_separate_official_metadata.sql b/internal/database/migrations/008_separate_official_metadata.sql similarity index 100% rename from internal/database/migrations/009_separate_official_metadata.sql rename to internal/database/migrations/008_separate_official_metadata.sql