Zły prompt
Zmień nazwę kolumny w jednej migracji i od razu dropnij starą, na produkcji, w piątek.
Developer · FREE
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:
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 "-".
Zmień nazwę kolumny w jednej migracji i od razu dropnij starą, na produkcji, w piątek.
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":
Agentowy asystent kodowania Anthropic uruchamiany w terminalu.
Alternatywy
Edytor kodu z wbudowanym agentem AI, fork Visual Studio Code.
Alternatywy
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.
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'.