Non ogni lavoro richiede l'intero database. Quando sviluppi una funzionalità in locale, raramente vuoi un dump di produzione completo che riempie il disco e impiega un'ora a importarsi. Vuoi la manciata di tabelle che la funzionalità tocca davvero.
Lo stesso vale quando stai facendo il debug di una singola tabella — riprodurre un problema sui dati in orders non richiede le altre 126 tabelle — o durante una migrazione parziale, in cui solo poche tabelle passano a un nuovo servizio. In tutti questi casi la domanda è la stessa: come estraggo solo queste tabelle da un dump gigantesco, in modo pulito e veloce?
L'approccio con sed/grep e perché si rompe
La risposta classica è affettare il file con sed tra le intestazioni di sezione che mysqldump scrive per ogni tabella:
# estrai la tabella users da un file mysqldump
sed -n '/-- Table structure for table `users`/,/-- Table structure for table/p' dump.sql > users.sql
Sembra ingegnoso, e su un dump piccolo e ordinato potrebbe persino funzionare una volta. Su un vero file da 7 GB va in pezzi in tanti modi sottili:
- INSERT multiriga. Una singola
INSERT INTO ... VALUESpuò estendersi su migliaia di righe. Gli strumenti orientati alle righe comesedegreptagliano quelle righe a metà e producono un file che non viene analizzato. - Backtick e caratteri speciali. I valori delle colonne contengono
--, punti e virgola, backtick, virgolette e a capo dentro le stringhe. Il tuo pattern corrisponde a testo dentro i dati che non doveva mai fare da delimitatore. - Nomi di tabella come sottostringhe. Estrarre
userprende ancheuser_roles,user_sessionsepassword_user, perché il nome compare come sottostringa di altri. - Commenti e intestazioni che cambiano. Il testo esatto dei commenti varia tra le versioni di MySQL, MariaDB e PostgreSQL, e
pg_dumpnon usa affatto le stesse intestazioni — così lo stesso comando restituisce silenziosamente niente. - Nessuna consapevolezza delle chiavi esterne. Anche se affetti
ordersalla perfezione, le sue righe fanno riferimento ausers.sednon ne ha idea, quindi l'estratto non si importa a causa di un errore di chiave esterna.
Finisci per accatastare awk su grep su sed, testando su sottoinsiemi, senza comunque fidarti del risultato. C'è un modo migliore.
Estrarre le tabelle con DumpCleaner
DumpCleaner analizza il dump come si deve — comprende i confini delle istruzioni, le INSERT multiriga, i backtick e i commenti — quindi taglia sempre sulle righe giuste. Estrarre le tabelle che ti servono richiede quattro passaggi:
- Trascina dentro il tuo dump
.sql. DumpCleaner scorre il file in streaming, quindi un dump da 7 GB si apre con memoria costante invece di caricare tutto. - Leggi l'elenco delle tabelle rilevato automaticamente. Ogni tabella viene analizzata ed elencata con il suo numero di righe e la sua dimensione — niente scorrere milioni di righe per trovare cosa c'è.
- Scegli le tabelle che vuoi. Spunta
users,orderseproducts, oppure digita una regex / un pattern di esclusione come*_logsper eliminare interi gruppi in un colpo solo. - Includi le tabelle padre delle chiavi esterne ed esporta. Facoltativamente includi automaticamente le tabelle padre referenziate, poi esporta un file pulito e importabile.
Alcune cose rendono tutto molto meno macchinoso rispetto agli strumenti da shell:
- I pattern di esclusione come
*_logso*_sessionseliminano il rumore di audit e sessione senza togliere la spunta a decine di tabelle a mano. - I filtri regex ti permettono di abbinare per prefisso, suffisso o qualsiasi pattern — tieni tutto ciò che corrisponde a
shop_*, per esempio. - Un'anteprima in tempo reale mostra esattamente quali tabelle finiranno nell'output mentre modifichi la selezione.
- Una dimensione di output stimata ti dice quanto sarà grande l'estratto prima di esportare, così sai che entrerà in locale.
- Le dipendenze di chiave esterna possono essere incluse automaticamente, così scegliere
ordersporta con sé silenziosamenteuserse l'estratto si importa senza errori di vincolo.
Solo le tabelle che ti servono — nient'altro
DumpCleaner estrae tabelle specifiche da dump di qualsiasi dimensione — in streaming, con memoria costante e con le chiavi esterne risolte al posto tuo. App nativa per macOS e iPadOS, acquisto una tantum.
Scarica dall'App StoreDomande frequenti
Posso estrarre più tabelle contemporaneamente?
Sì. Spunta tutte le tabelle che vuoi — users, orders e products insieme — e DumpCleaner le scrive tutte in un unico file in un solo passaggio.
Mantiene le dipendenze di chiave esterna?
Facoltativamente, sì. Attiva includi le dipendenze di chiave esterna e ogni tabella padre referenziata dalla tua selezione viene inclusa automaticamente, così l'estratto si importa senza errori di vincolo.
Posso escludere tabelle per pattern?
Sì. Usa pattern di esclusione come *_logs o *_sessions, oppure un'espressione regolare, per eliminare interi gruppi di tabelle invece di togliere la spunta a una a una.
Funziona con PostgreSQL?
Sì. DumpCleaner legge dump MySQL, MariaDB e PostgreSQL (pg_dump) e gestisce i nomi qualificati per schema come public.users durante l'estrazione delle tabelle.
Smetti di combattere con sed e grep
Trascina, scegli le tue tabelle, esporta. DumpCleaner estrae esattamente le tabelle che ti servono — con le loro chiavi esterne — da qualsiasi dump.
Scarica dall'App Store