Migracje baz danych i kodu
Twoja tabela users ma 12 milionów wierszy i kolumnę o nazwie name, która musi zostać podzielona na first_name i last_name. Twój ORM ma nową wersję główną z 40 zmianami łamiącymi kompatybilność. Dostawca płatności zdeprecjonował swoje API v1 sześć miesięcy temu, a termin wygaszenia mija w przyszły piątek. Każda z tych migracji to wieloetapowy proces, w którym jeden zły ruch oznacza przestój, utratę danych lub jedno i drugie. Nie możesz sobie pozwolić na błąd i nie możesz sobie pozwolić na trzy tygodnie pracy nad tym.
Czego się nauczysz
Dział zatytułowany „Czego się nauczysz”- Workflow Claude Code do planowania i generowania migracji baz danych bez przestoju, w tym wzorzec expand-contract do zmiany nazw kolumn i typów
- Prompty do skopiowania tworzące pliki migracji, skrypty backfill danych i procedury wycofania dla Prisma, Drizzle, Knex i surowego SQL
- Strategie aktualizacji frameworków wykorzystujące Claude Code do identyfikacji zmian łamiących kompatybilność, generowania codemodów i weryfikacji ścieżki migracji
Migracje baz danych bez przestoju
Dział zatytułowany „Migracje baz danych bez przestoju”Podstawowym wyzwaniem migracji baz danych na działającym systemie jest to, że stary i nowy kod działają jednocześnie podczas wdrażania. Twoja strategia migracji musi zapewnić, że obie wersje mogą działać poprawnie.
Claude Code generuje trzy oddzielne pliki migracji plus zmiany w kodzie aplikacji. Kluczowym elementem jest trigger bazodanowy utrzymujący obie kolumny w synchronizacji podczas okna przejściowego. Bez niego wiersze zapisane przez instancje starego kodu miałyby pusty first_name.
Po wygenerowaniu migracji, zweryfikuj ją lokalnie:
Run the Step 1 migration against our local database, then verify that: 1) the trigger correctly syncs data when I insert a row with only the old column, 2) the backfill script handles NULL values, 3) the rollback script cleanly reverses everything.Migracje dużych tabel bez blokowania
Dział zatytułowany „Migracje dużych tabel bez blokowania”Dodanie indeksu lub zmiana typu kolumny w tabeli z wieloma milionami wierszy może zablokować tabelę na minuty. Claude Code potrafi wygenerować podejście nieblokujące.
Przetwarzanie wsadowe z przerwami jest kluczowe dla dużych tabel. Claude Code generuje skrypt śledzący postęp (ostatni przetworzony ID), dzięki czemu może wznowić pracę od miejsca przerwania zamiast zaczynać od nowa.
Aktualizacje frameworków i bibliotek
Dział zatytułowany „Aktualizacje frameworków i bibliotek”Aktualizacje wersji głównych są uciążliwe, ponieważ wymagają znalezienia każdego użycia zmienionego API i jego aktualizacji. Claude Code może to zrobić systematycznie.
We are upgrading from Express 4 to Express 5. Read the Express 5 migration guide (I am pasting the changelog below) and scan our codebase for every breaking change that affects us. For each affected file, show what needs to change and make the update. After all changes, run our test suite to verify nothing is broken.Dla migracji ORM prompt jest podobny:
We are upgrading from Prisma 4 to Prisma 6. The breaking changes include: new transaction API, changed findUnique behavior with null, removed deprecated methods. Scan our entire codebase, find every affected call site, and update them to the new API. Also update the Prisma schema if the schema format changed.Migracje formatów danych
Dział zatytułowany „Migracje formatów danych”Czasami sama struktura danych musi się zmienić — przejście z płaskiej tabeli na kolumnę JSON, podział monolitycznej tabeli na znormalizowane relacje lub migracja z jednego systemu przechowywania na inny.
Claude Code generuje cały pipeline: schemat, skrypt migracji, aktualizacje ORM i weryfikację. Zapytanie weryfikujące jest często pomijane, ale niezbędne — porównuje liczbę wierszy i sumy kontrolne między starymi danymi JSON a nowymi znormalizowanymi tabelami.
Migracja wersji API
Dział zatytułowany „Migracja wersji API”Gdy zewnętrzne API deprecjonuje wersję, musisz zaktualizować każde miejsce wywołania bez psucia integracji.
Our payment provider is deprecating their v1 API. Here is their v2 migration guide. Find every call to their API in our codebase, map each v1 endpoint to its v2 equivalent, update the request payloads and response handling, and add error handling for the new error format. Create a feature flag (PAYMENT_API_V2=true) so we can test the new integration alongside the old one before cutting over completely.Podejście z feature flag pozwala uruchamiać obie wersje API jednocześnie, kierując procent ruchu do v2 podczas monitorowania błędów, zanim zdecydujesz się na pełne przełączenie.
Generowanie skryptów wycofania
Dział zatytułowany „Generowanie skryptów wycofania”Każda migracja powinna mieć swój rollback. Claude Code może wygenerować oba kierunki jednocześnie.
For every migration file in our migrations/ directory that does not have a corresponding down migration, generate the rollback. For addColumn operations, generate dropColumn. For createTable, generate dropTable. For data transformations, generate the reverse transformation. Flag any migrations that are not safely reversible (like dropping a column with data) and explain why.Bezpieczne testowanie migracji
Dział zatytułowany „Bezpieczne testowanie migracji”Nigdy nie uruchamiaj migracji na produkcji po raz pierwszy. Claude Code może wygenerować test harness.
Create a migration test script that: 1) creates a fresh database from our schema, 2) seeds it with realistic test data (10,000 users, 50,000 orders), 3) runs all pending migrations, 4) runs our application test suite against the migrated database, 5) runs the rollback for each migration and verifies the schema returns to its original state, 6) measures migration execution time and reports if any step takes longer than 30 seconds.Ten skrypt testowy staje się częścią twojego pipeline CI, wychwytując problemy z migracjami zanim trafią na staging.
Gdy coś idzie nie tak
Dział zatytułowany „Gdy coś idzie nie tak”Skrypt backfill zużywa całą pamięć. Wczytywanie milionów wierszy do pamięci spowoduje crash Node.js. Poproś Claude Code: “Rewrite the backfill script to use a cursor-based approach that processes 5,000 rows at a time, committing each batch separately, and logs progress every 10,000 rows.”
Trigger bazodanowy powoduje kaskadę aktualizacji. Triggery wywołujące inne triggery mogą tworzyć nieskończone pętle. Claude Code uwzględnia to używając zabezpieczeń pg_trigger_depth(), ale zweryfikuj: “Add a safety check to the sync trigger that prevents recursive execution.”
Migracja przechodzi w testach, ale nie na produkcji. Dane produkcyjne mają przypadki brzegowe, których twoje dane testowe nie mają. Części winowajcy: wartości NULL w kolumnach, które zakładaliśmy że zawsze są wypełnione, znaki unicode, ekstremalnie długie łańcuchy znaków. Poproś Claude Code: “Generate a pre-migration validation query that checks for NULL values, empty strings, and strings longer than 255 characters in the columns we are migrating.”
Aktualizacja ORM subtelnie zmienia zachowanie zapytań. Po aktualizacji Prisma lub Drizzle zapytania mogą zwracać nieco inne wyniki (inna obsługa NULL, zmienione domyślne sortowanie). Uruchom istniejący zestaw testów po aktualizacji i przekaż wszelkie błędy do Claude Code: “These 3 tests failed after the Prisma upgrade. The query results differ. Analyze why and update either the queries or the test expectations.”