Takémigrace schématu, schema migration, datová migracePokročilý
Definice
Migrace databáze je řízená změna struktury, obsahu nebo umístění databáze tak, aby aplikace dál pracovala se správnými daty. V praxi zahrnuje skripty pro úpravu schématu, přesun a čištění dat, testování, zálohy, nasazení ve správném pořadí a plán návratu při selhání.
Nezaměňujte: Migrace databáze může znamenat změnu schématu a dat v existující databázi, ale také přesun databáze mezi systémy nebo prostředími.
Co se při migraci databáze skutečně mění
Migrace databáze může znamenat drobnou úpravu tabulky, rozdělení jedné tabulky na více částí, vytvoření indexu, doplnění výchozích hodnot nebo přesun dat do jiného databázového stroje. Společným znakem je řízený postup: změna má popsaný důvod, pořadí kroků, očekávaný výsledek a způsob ověření.
Databázová migrace se často zapisuje jako soubor verzovaných skriptů. Relační databáze používají hlavně DDL a SQL, dokumentové databáze zase častěji kombinují změnu aplikačního kódu s dávkovou úpravou dokumentů. Migrace je součást zdrojového kódu projektu, ne ruční poznámka v administraci.
Pořadí kroků u bezpečné změny schématu
Bezpečný postup začíná zálohou a testem na kopii produkčních dat. Následuje migrace schématu, případný backfill starších záznamů, nasazení aplikačního kódu a kontrola metrik. U citlivých změn se přidává dočasná kompatibilita: stará i nová verze aplikace musejí chvíli umět pracovat se stejnou databází.
Vývojový tým by měl rozlišovat rychlé metadata operace od těžkých změn, které přepisují mnoho řádků nebo blokují tabulky. Přidání nullable sloupce bývá jiné riziko než přejmenování používaného sloupce, změna typu, vytvoření unikátního omezení nebo úprava cizího klíče.
Migrace schématu není totéž co přesun celé databáze
Schéma migrace mění tvar dat: tabulky, sloupce, indexy, omezení nebo kolekce. Datová migrace mění samotné hodnoty, například převádí měnu, slučuje duplicitní zákazníky nebo doplňuje novou kategorizaci. Obě části se často potkají v jednom release, ale mají jiné riziko a jiný způsob kontroly.
Přesun databáze mezi servery, cloudy nebo databázovými systémy přidává další problémy: rozdíly v typech, transakcích, kódování, časových pásmech, oprávněních a výkonu dotazů. U takového přesunu nestačí zkopírovat data. Důležité je ověřit konzistenci, latenci aplikace a chování záloh.
Proč rollback nemusí vrátit realitu zpátky
Rollback skript je užitečný, ale neřeší všechno. Změna schématu může být vratná, zatímco změněná obchodní data vratná nejsou bez dodatečného auditního záznamu. Pokud migrace smaže sloupec nebo přepíše hodnoty, návrat vyžaduje zálohu, archiv nebo kompenzační migraci.
Praktický plán proto počítá s transakcemi tam, kde jsou dostupné, s vlastnostmi ACID, s idempotentními skripty a s jasným bodem zastavení. U dlouhých migrací bývá bezpečnější postup po dávkách než jeden velký příkaz, který drží zámky a nejde rozumně přerušit.
Místo migrací v týmovém nasazování
Větší projekty spouštějí migrace automatizovaně v pipeline, ale s pravidly: kdo migraci schvaluje, kdy běží vůči nasazení aplikace, jak se loguje výsledek a co se stane při chybě. Napojení na CI/CD snižuje ruční chyby, ale nenahrazuje znalost konkrétní databáze.
Migrace databáze je dobrá jen tehdy, když je opakovatelná. Stejný skript má dát stejný výsledek ve vývoji, testu, stagingu i produkci, s výjimkou objemu dat a provozních limitů. Proto se migrace verzují, recenzují a testují podobně přísně jako aplikační kód.
Příklady z praxe
Nový povinný sloupec v tabulce uživatelů
E-shop přidává souhlas se zasíláním marketingu ke všem účtům. Migrace nejdřív přidá nový sloupec, doplní hodnotu pro stávající uživatele a teprve potom nastaví omezení NOT NULL. Aplikace po nasazení může číst jednotné hodnoty místo směsi NULL a boolean.
BEGIN; ALTER TABLE users ADD COLUMN marketing_consent boolean; UPDATE users SET marketing_consent = false WHERE marketing_consent IS NULL; ALTER TABLE users ALTER COLUMN marketing_consent SET DEFAULT false; ALTER TABLE users ALTER COLUMN marketing_consent SET NOT NULL; COMMIT;Kontrola po přesunu objednávek
Firma převádí objednávky ze staré tabulky do nové struktury s oddělenými položkami. Po dávkovém přesunu tým porovná počty záznamů a hledá objednávky, které v cíli chybí. Produkční přepnutí proběhne až po opravě rozdílů a kontrole několika reálných objednávek.
SELECT COUNT(*) AS old_count FROM legacy_orders; SELECT COUNT(*) AS new_count FROM orders; SELECT order_id FROM legacy_orders EXCEPT SELECT external_id FROM orders;
Časté omyly
- MýtusMigrace databáze je jen ALTER TABLE, který se spustí při nasazení.
- Ve skutečnostiMigrace databáze může obsahovat ALTER TABLE, ale tím práce nekončí. Bez testu, zálohy, kontroly dat a plánu nasazení může jednoduchý příkaz způsobit výpadek nebo nekonzistenci.
- MýtusKdyž máme zálohu, nemusíme řešit rollback migrace.
- Ve skutečnostiZáloha je důležitá pojistka, ale obnova celé databáze může znamenat ztrátu nových dat a dlouhý výpadek. Rollback nebo kompenzační migrace řeší menší problém rychleji, pokud je připravená předem.
Časté dotazy
- Má migrace databáze vždy obsahovat rollback?
- Migrace databáze by měla mít plán návratu, ale rollback skript není vždy dostatečný. Změny schématu se často vracejí snáz než změny dat, protože přepsané nebo smazané hodnoty nemusí být bez zálohy obnovitelné. U rizikových migrací je bezpečnější kombinovat rollback, zálohu, auditní tabulku a možnost zastavit nasazení před bodem, kde by návrat byl nákladný.
- Jak se migrace databáze testuje před produkcí?
- Migrace databáze se testuje na prostředí, které se co nejvíc podobá produkci strukturou, verzí databáze a objemem dat. Důležité je ověřit nejen syntaxi skriptu, ale také dobu běhu, zámky, dopad na běžné dotazy a výsledek po opakovaném spuštění, pokud má být skript idempotentní. Samostatný test s prázdnou databází často nestačí.
- Proč se migrace databáze spouští ze skriptů místo ručních úprav?
- Migrace databáze se nemá dělat ručně v administraci, protože ruční změna se špatně opakuje, recenzuje a dohledává. Verzovaný migrační skript ukazuje, kdo změnu vytvořil, proč vznikla a v jakém pořadí má běžet. Stejný skript lze spustit ve vývoji, testu i produkci, což výrazně snižuje rozdíly mezi prostředími.
- Co dělat, když migrace databáze trvá příliš dlouho?
- Migrace databáze, která trvá příliš dlouho, se obvykle rozdělí na menší kroky. Častý postup je přidat nové pole bez blokujícího omezení, doplňovat data po dávkách a teprve po kontrole přidat finální constraint nebo přepnout aplikaci. U velkých tabulek je potřeba sledovat zámky, replikaci, růst logů a dopad na běžné uživatele.
Zdroje
- PostgreSQL Documentation(otevře se v novém okně)
- ALTER TABLE(otevře se v novém okně)
- Migrations Overview(otevře se v novém okně)
- Database Migration Service documentation(otevře se v novém okně)