Jak přejít z MySQL na PostgreSQL: praktický průvodce migrací
Další praktickou radou je používat interaktivní rebasování k reorganizaci commitů. Pokud máte ve větvi smíšené změny, můžete je rozdělit nebo sloučit, aby byly logické celky. Tím usnadníte pozdější revize a hledání chyb. Vyhněte se ukládání souborů s ladicími výpisy nebo dočasnými komentáři do commitů, protože to znečišťuje historii a ztěžuje orientaci. Místo toho použijte .gitignore pro dočasné soubory a před commitnutím si vždy zkontrolujte diff.
Praktický postup: od exportu po ověření konzistence Pro samotný přenos dat použijte nástroj pgloader, který umí číst přímo z MySQL a zapisovat do PostgreSQL. Před spuštěním si připravte cílovou databázi s prázdným schématem – pgloader vytvoří tabulky automaticky, ale výsledné datové typy často nejsou optimální. Po importu proto zkontrolujte definice sloupců a upravte je ručně, zejména pokud jde o číselné typy (MySQL INT vs PostgreSQL INTEGER) nebo dekadická čísla. Pro velké tabulky zvažte rozdělení exportu na menší dávky, abyste předešli přetečení paměti serveru.
Poté přejděte do složky, kterou chcete verzovat, a spusťte příkaz git init. Tím vytvoříte skrytou složku .git, která obsahuje celou historii projektu. Nyní můžete začít sledovat soubory. Příkaz git add . přidá všechny soubory do takzvané „staging area" – dočasného prostoru, kde se připravují změny pro commit. Pokud chcete přidat jen konkrétní soubor, použijte git add soubor.txt. Častou chybou je zapomenout na tento krok a rovnou spustit commit, což vede k tomu, že se změny neuloží.
Zásadní rozdíl najdete také v práci s transakcemi a zámky. PostgreSQL používá MVCC, což znamená, že čtení neblokuje zápis a naopak. To je výhoda, ale vyžaduje to pravidelné spouštění VACUUM, aby se databáze nezanášela mrtvými řádky. Po migraci nastavte autovacuum tak, aby odpovídalo zátěži vaší aplikace. Dále zkontrolujte, zda vaše aplikace nepoužívá MySQL specifické příkazy jako INSERT IGNORE nebo ON DUPLICATE KEY UPDATE – v PostgreSQL je musíte nahradit pomocí INSERT ... ON CONFLICT DO NOTHING nebo DO UPDATE.
Jednou z nejužitečnějších funkcí Gitu je možnost vracet se zpět. Pokud chcete vrátit změny v souboru, který ještě nebyl commitnut, použijte git checkout -- soubor.txt. Tím se soubor vrátí do stavu z posledního commitu. Pokud jste již provedli commit a chcete jej zrušit, použijte git revert – ten vytvoří nový commit, který změny z předchozího vrátí zpět. Vyhnete se tak přepisování historie, což je důležité, pokud s projektem pracuje více lidí.
Častým problémem je záměrné nebo nechtěné sdílení nedokončených změn mezi větvemi. Než přepnete na jinou větev, vždy si ověřte, že máte čistý pracovní strom. Pokud potřebujete uložit rozpracovanou práci, použijte stash nebo commit s popisem, že jde o rozpracovaný stav. Nikdy nepoužívejte force push do sdílených větví, protože to může smazat práci kolegů. Místo toho používejte force push pouze na osobní větve, a to ještě s vědomím, že to znesnadní spolupráci.
Během importu sledujte logy na chyby. Typickou pastí jsou rozdílné formáty data a času, kdy MySQL umožňuje ukládat neplatné hodnoty, zatímco PostgreSQL je striktní. Pokud narazíte na chybu typu 'invalid input syntax for type timestamp', opravte zdrojová data ještě v MySQL nebo použijte dočasný sloupec s textovým typem. Po dokončení importu porovnejte počty řádků v každé tabulce mezi zdrojovou a cílovou databází. Nástroj pgloader umí generovat report, ale pro kritické tabulky si napište vlastní kontrolní dotaz.
Jak efektivně řešit konflikty při slučování více větví Konflikty při slučování jsou přirozenou součástí práce s více větvemi. Nejefektivnější způsob, jak je minimalizovat, je častá integrace. Pokud vaše větev žije déle než dva dny, pravidelně ji slučujte nebo rebasujte s hlavní větví. Při řešení konfliktů vždy čtěte obě verze kódu, ne jen tu svou. Často se stává, že změny z druhé větve jsou vhodnější, i když jste původně psali svou verzi. Vždy po vyřešení konfliktu spusťte testy, ne jen kompilaci.
Když v jednom projektu kombinujete více jazyků, narazíte na dvě základní úskalí: udržení konzistence terminologie a správu překladů bez zbytečné duplicity. Nejprve si proto definujte, které části kódu, dokumentace nebo uživatelského rozhraní budou jazykově závislé. Oddělte je do samostatných souborů nebo modulů, ať nemusíte při změně textu zasahovat do logiky aplikace. Ideální je vytvořit si složkovou strukturu, kde každý jazyk má vlastní adresář, ale sdílí stejné klíče pro překlady.
Na závěr si ověřte, že váš terminál a debugger odpovídají aktuálnímu jazyku. V IDE nastavte pro každý adresář jiný run configuration. Ujistěte se, že při spuštění testů používáte správný framework (např. pytest pro Python, Jest pro JavaScript). Dobré je také zapnout „spy" – funkci, která ukazuje, jaký příkaz se spouští na pozadí. Pokud vidíte, že se volá špatný interpret, je to první signál, že máte ve struktuře projektu chybu. Po takovém nastavení se práce s více jazyky stane intuitivní a nebudete ztrácet čas laděním prostředí.