Nie každá úloha potrebuje celú databázu. Keď lokálne staviate funkciu, len zriedka chcete, aby vám plný produkčný dump zapĺňal disk a importoval sa hodinu. Chcete tú hŕstku tabuliek, ktorých sa funkcia naozaj dotýka.
To isté platí, keď ladíte jednu tabuľku — reprodukovanie problému s dátami v orders nevyžaduje ďalších 126 tabuliek — alebo robíte čiastočnú migráciu, kde sa do novej služby presúva len niekoľko tabuliek. Vo všetkých týchto prípadoch je otázka rovnaká: ako dostanem len tieto tabuľky z obrovského dumpu, čisto a rýchlo?
Prístup sed/grep a prečo zlyháva
Klasickou odpoveďou je rozrezať súbor pomocou sed medzi hlavičkami sekcií, ktoré mysqldump zapisuje pre každú tabuľku:
# vytiahnite tabuľku users z mysqldump súboru
sed -n '/-- Table structure for table `users`/,/-- Table structure for table/p' dump.sql > users.sql
Vyzerá to chytro a na malom, upratanom dumpe to raz možno aj zafunguje. Na skutočnom 7 GB súbore sa to rozpadne mnohými zákernými spôsobmi:
- Viacriadkové INSERTy. Jediný
INSERT INTO ... VALUESsa môže rozprestierať cez tisíce riadkov. Riadkovo orientované nástroje akosedagreptie riadky rozseknú napoly a vytvoria súbor, ktorý sa neparsuje. - Spätné úvodzovky a špeciálne znaky. Hodnoty stĺpcov obsahujú
--, bodkočiarky, spätné úvodzovky, úvodzovky a nové riadky vnútri reťazcov. Váš vzor sa zhoduje s textom vnútri dát, ktorý nikdy nemal byť oddeľovačom. - Názvy tabuliek ako podreťazce. Extrakcia
userzoberie ajuser_roles,user_sessionsapassword_user, pretože názov sa objavuje ako podreťazec iných. - Komentáre a hlavičky sa menia. Presný text komentára sa líši medzi verziami MySQL, MariaDB a PostgreSQL a
pg_dumpvôbec nepoužíva rovnaké hlavičky — takže rovnaký príkaz potichu nevráti nič. - Žiadne povedomie o cudzích kľúčoch. Aj keď
ordersrozrežete dokonale, jej riadky odkazujú nausers.sedo tom nemá tušenie, takže extrakt sa nedá naimportovať kvôli chybe cudzieho kľúča.
Skončíte tak, že navrstvíte awk na grep na sed, testujete na podmnožinách a výsledku aj tak neveríte. Existuje lepší spôsob.
Extrahujte tabuľky s DumpCleaner
DumpCleaner parsuje dump poriadne — rozumie hraniciam príkazov, viacriadkovým INSERTom, spätným úvodzovkám a komentárom — takže vždy reže na správnych riadkoch. Extrakcia tabuliek, ktoré potrebujete, zaberie štyri kroky:
- Pretiahnite svoj
.sqldump dovnútra. DumpCleaner prúduje súbor, takže 7 GB dump sa otvorí s konštantnou pamäťou namiesto načítania celej veci. - Prečítajte si automaticky detegovaný zoznam tabuliek. Každá tabuľka je vyparsovaná a vypísaná s počtom riadkov a veľkosťou — žiadne rolovanie cez milióny riadkov pri hľadaní, čo tam je.
- Vyberte tabuľky, ktoré chcete. Zaškrtnite
users,ordersaproducts, alebo napíšte regulárny výraz / vylučovací vzor ako*_logsa zahoďte celé skupiny naraz. - Zahrňte nadradené tabuľky cudzích kľúčov a exportujte. Voliteľne automaticky pritiahnite odkazované nadradené tabuľky a potom exportujte čistý, importovateľný súbor.
Niekoľko vecí robí toto oveľa menej otravné ako shellové nástroje:
- Vylučovacie vzory ako
*_logsalebo*_sessionsodstránia šum z auditných a session tabuliek bez ručného odškrtávania desiatok tabuliek. - Regex filtre vám umožňujú zhodu podľa predpony, prípony alebo akéhokoľvek vzoru — ponechajte napríklad všetko, čo zodpovedá
shop_*. - Živý náhľad presne ukazuje, ktoré tabuľky skončia vo výstupe, keď meníte výber.
- Odhadovaná veľkosť výstupu vám povie, aký veľký bude extrakt ešte pred exportom, takže viete, že sa lokálne zmestí.
- Závislosti cudzích kľúčov možno zahrnúť automaticky, takže výber
ordersticho pritiahne ajusersa extrakt sa naimportuje bez chýb obmedzení.
Len tabuľky, ktoré potrebujete — nič viac
DumpCleaner extrahuje konkrétne tabuľky z dumpov akejkoľvek veľkosti — prúdovo, s konštantnou pamäťou a s cudzími kľúčmi vyriešenými za vás. Natívna aplikácia pre macOS a iPadOS, jednorazová kúpa.
Stiahnuť v App StoreČasto kladené otázky
Môžem extrahovať viac tabuliek naraz?
Áno. Zaškrtnite toľko tabuliek, koľko chcete — users, orders a products spolu — a DumpCleaner ich všetky zapíše do jedného súboru v jednom prechode.
Zachováva závislosti cudzích kľúčov?
Voliteľne, áno. Zapnite zahrnúť závislosti cudzích kľúčov a každá nadradená tabuľka odkazovaná vaším výberom sa pritiahne automaticky, takže extrakt sa naimportuje bez chýb obmedzení.
Môžem vylúčiť tabuľky podľa vzoru?
Áno. Použite vylučovacie vzory ako *_logs alebo *_sessions, alebo regulárny výraz, a zahoďte celé skupiny tabuliek namiesto ich odškrtávania po jednej.
Funguje to s PostgreSQL?
Áno. DumpCleaner číta dumpy MySQL, MariaDB a PostgreSQL (pg_dump) a pri extrakcii tabuliek zvláda názvy kvalifikované schémou ako public.users.
Prestaňte bojovať so sed a grep
Pretiahnite, vyberte tabuľky, exportujte. DumpCleaner vytiahne presne tabuľky, ktoré potrebujete — aj s ich cudzími kľúčmi — z akéhokoľvek dumpu.
Stiahnuť v App Store