6 zásad, jak udržet více feature větví v čistotě
Přechod z MySQL na PostgreSQL bývá častější, než se zdá. Důvodem bývá potřeba pokročilejších datových typů, lepší podpory fulltextového vyhledávání nebo jen touha po robustnější správě souběžného přístupu. Samotná migrace ale není kopírováním souborů. Klíčové je pochopit rozdíly v chování obou systémů a připravit si data i schéma tak, aby přenos proběhl hladce.
Než začnete rozesílat životopisy, zkuste si odpovědět na tři otázky: Jaký problém řeším? Proč mě baví právě toto? Jakou technologii bych si vybral pro nový projekt a proč? Pokud nedokážete odpovědět jasně, vraťte se k učení. Typický začátečník si myslí, že musí znát všechno – od mikroservisů po strojové učení. Ve skutečnosti stačí jeden jazyk, jeden framework a jedna oblast, ve které se stanete opravdu dobří. Hluboká znalost jedné věci je na pohovoru vždy přesvědčivější než povrchní přehled o všem.
Nejprve si udělejte pořádek v databázovém schématu. MySQL často používá typy jako TINYINT, ENUM nebo automatické číslování pomocí AUTO_INCREMENT. PostgreSQL nabízí ekvivalenty, ale ne vždy se chovají stejně. Například ENUM v PostgreSQL je samostatný typ, který se hůře mění. Místo toho zvažte použití referenčních tabulek nebo prostého VARCHAR s CHECK omezením. Drobnosti, jako je rozdíl v ukládání booleovských hodnot (MySQL používá 0/1, PostgreSQL TRUE/FALSE), se projeví až při porovnávání dat.
Nakonec si naplánujte odstávku nebo běh na ostrých datech. Migrace by měla proběhnout v čase s nejmenším provozem, a pokud možno na kopii produkčních dat. Po přepnutí provozu sledujte logy a výkon. PostgreSQL má odlišný plánovač dotazů, takže některé dotazy, které byly v MySQL rychlé, mohou být pomalejší. Vytvořte si indexy podle skutečných dotazů a využijte ANALYZE pro aktualizaci statistik. Migrace není jednorázová akce, ale proces, který si zaslouží čas a důkladné testování.
Po importu přichází fáze validace. Porovnejte počty záznamů v každé tabulce, ale také agregace, jako jsou součty nebo průměry. Typickou chybou je přehlédnutí rozdílu v chování při porovnávání řetězců. MySQL porovnává bez ohledu na velikost písmen (pokud není nastaveno jinak), zatímco PostgreSQL je case-sensitive. Proto se může stát, že duplicitní záznamy, které v MySQL existovaly, najednou v PostgreSQL selžou na unikátním indexu. Předem si proto projděte sloupce s textovými hodnotami a případně použijte CITEXT nebo lowercase indexy.
Dalším častým problémem jsou funkce a triggery. MySQL a PostgreSQL mají odlišnou syntaxi pro uložené procedury a triggery. Většinu kódu budete muset přepsat, a to nejen kvůli syntaxi, ale i kvůli rozdílnému chování transakcí. PostgreSQL klade větší důraz na atomicitu a izolaci, což může odhalit chyby v logice, které v MySQL nebyly vidět. Otestujte všechny kritické operace, zejména ty, které zapisují více tabulek najednou.
SQL injection patří mezi nejstarší, ale stále nejnebezpečnější zranitelnosti webových aplikací. Útočník dokáže vložit vlastní SQL příkaz do dotazu, který aplikace posílá databázi. Přitom nepotřebuje žádné speciální nástroje – stačí mu formulář, URL parametr nebo hlavička, kterou aplikace předává do SQL dotazu. Pokud se to podaří, může číst citlivá data, měnit je, nebo dokonce získat plnou kontrolu nad serverem. Mnoho týmů přitom považuje tuto hrozbu za vyřešenou, protože používají ORM nebo frameworky. Realita je ale jiná: chyba vzniká v okamžiku, kdy se do dotazu dostane uživatelský vstup bez ošetření.
Jak často a jakým způsobem aktualizovat větev Pravidelně si do své feature větve tahněte změny z hlavní větve, ideálně každý den. Používejte rebase místo merge, pokud jste si jisti, že vaše větev nikdo další nesdílí. Rebase udělá historii lineárnější a usnadní pozdější code review. Pokud ale na větvi pracuje více lidí, merge je bezpečnější volbou. Nezapomeňte, že rebase přepisuje historii, takže u sdílených větví způsobí konflikty ostatním.
Vstup do světa testování softwaru bez předchozí praxe je reálný, ale vyžaduje jiný přístup než klasické hledání zaměstnání. Firmy nehledají někoho, kdo zná nazpaměť definice testovacích technik, ale člověka, který umí přemýšlet systematicky a hledat chyby. Základním kamenem je pochopit, že tester bez praxe musí prokázat schopnost učení a analytické myšlení. To vám žádný kurz nezaručí, pokud ho hned nepodložíte vlastní aktivitou.
Nezapomeňte, že první zaměstnání není o dokonalém kódu, ale o tom, jestli do týmu zapadnete a jestli se rychle učíte. Proto se vyhněte dvěma extrémům: nepřehánějte své zkušenosti a zároveň se nepodceňujte. Když firma hledá juniora, ví, že bude investovat do vašeho rozvoje. Vaším úkolem je ukázat, že tato investice nebude ztracená. Připravte si proto otázky na plat? Ne, to nechte na pozdější fázi. Místo toho se ptejte na mentoring, na to, jak vypadá první měsíc v práci, nebo na to, co by si přáli, abyste se naučil před nástupem.