Developer · FREE

Migracja schematu bazy

Z opisu zmiany schematu tnie plan expand-contract: dodać, uzupełnić, przełączyć odczyty, dopiero drop. Każdy deploy da się cofnąć osobno. Nie robi rename kolumny w miejscu i nie trzyma locka na milionie wierszy.

reviewed:

Jak zainstalować

  1. Uzupełnij pola poniżej (albo zostaw nazwy zmiennych i dopisz w czacie). Wartości z Skill creatora na liście podstawiają się same.
  2. Kopiuj, potem wklej w Claude.ai (instrukcje projektu) albo ChatGPT (Custom Instructions).
  3. Albo pobierz SKILL.md i połóż w folderze skilli Claude Code.
SKILL
Zmiana słowami: [ZMIANA]. Silnik: [SILNIK]. Szacunek ruchu (wiersze / RPS): [RUCH].

Jeśli [ZMIANA] albo [SILNIK] puste - dopytaj i stop.
Jeśli [RUCH] puste - załóż dużą tabelę (lock i backfill partiami), nie "na pewno setki wierszy".
NIE PISZ SQL-a drop/rename w jednym kroku z kodem, który już czyta nową nazwę.

Zwracasz plan deploów, nie "jedną migrację na wszystko":

## 0. Kontrakt
- stary kształt (kolumny/tabele, które dziś żyją)
- nowy kształt
- czy kod stary i nowy muszą działać naraz (domyślnie TAK przy rolling deploy)

## 1. Expand (deploy A, odwracalny)
tylko dodawanie: nullable kolumna, nowa tabela, nowy indeks.
Postgres: `CREATE INDEX CONCURRENTLY` gdy [RUCH] to nie "pusta tabela".
MySQL/InnoDB: oznacz ryzyko locka; zaproponuj `pt-online-schema-change` albo odpowiednik, nie `ALTER` w ciemno na dużej tabeli.

## 2. Dual-write (deploy B)
aplikacja pisze stary i nowy kształt. Flaga albo feature, nie zgadywanie.

## 3. Backfill
partiami (np. 1k-10k wierszy), z przerwą, z limitem czasu. Jeden `UPDATE` na całą tabelę = BLOKUJĄCE, chyba że [RUCH] mówi "setki wierszy".
Idempotentny: da się puścić drugi raz.

## 4. Switch odczytów (deploy C)
kod czyta nowy kształt, nadal pisze oba. Pieczenie. Rollback kodu jest legalny, bo dane nadal spływają.

## 5. Contract (deploy D, osobno, później)
koniec zapisu na stare. Drop/rename dopiero gdy metryka "odczyt starej kolumny" = 0.

## Down
dla A-D: konkretna komenda / migracja wstecz. "Nie da się" wolno tylko przy destrukcji danych - wtedy napisz to wprost i wymagaj backfillu kopii.

## Test
1. stary kod + nowy schemat po A
2. nowy kod + stary odczyt wyłączony po C
3. lock: `statement_timeout` / odpowiednik, nie czekamy w nieskończoność

Zakaz: rename w miejscu, `NOT NULL` bez defaultu i bez backfillu, drop w tym samym PR co expand. Dywiz "-".

Zanim wkleisz

Skill vs zły prompt

Zły prompt

Zmień nazwę kolumny w jednej migracji i od razu dropnij starą, na produkcji, w piątek.

Skill

Zmiana słowami: [ZMIANA]. Silnik: [SILNIK]. Szacunek ruchu (wiersze / RPS): [RUCH].

Jeśli [ZMIANA] albo [SILNIK] puste - dopytaj i stop.
Jeśli [RUCH] puste - załóż dużą tabelę (lock i backfill partiami), nie "na pewno setki wierszy".
NIE PISZ SQL-a drop/rename w jednym kroku z kodem, który już czyta nową nazwę.

Zwracasz plan deploów, nie "jedną migrację na wszystko":

Użyj z tym narzędziem

Lekcja: claude-start-06-claude-dla-programisty

Pytania

Jak użyć skilla "Migracja schematu bazy" w Claude?

Uzupełnij pola w nawiasach (albo weź je z profilu Skill creator na /skille), kliknij Kopiuj i wklej treść do instrukcji projektu w Claude.ai. W Claude Code kliknij Pobierz SKILL.md i połóż plik w folderze skilli. Skill działa też w ChatGPT (Custom Instructions). Nie chowa się za paywallem: kopia jest darmowa.

Kiedy tego skilla NIE używać?

Nie do rollbacku całego releasu (osobny runbook). Nie do dumpa produkcyjnego na laptop. Nie gdy nie znasz silnika. Nie do 'przepisania bazy na Mongo przy okazji'.