Quando devi migrare un database da un dbms ad un altro o esistono dei tool fatti e testati che fanno questo lavoro, oppure te li crei oppure ti esporti tutto in un bel file sql corposo e cerchi di ricaricare i vecchi dati sulle tabelle nuove.
Nel caso recente, un db con 25milioni di record su PostGres da migrare a Mysql, dumpato in plaintext sql ha generato un file di 2.4GB e spicci.
Problema: una volta creato il file sql scopri che alcune righe all’inizio del file generano errori e bloccano l’importazione. Che fare? Se hai a disposizione una shell Unix-like:
- giochi con tail/awk
- provi ad editare con vi il file e salvarlo
- (cosa che mi sembrava più utile) splitti il file in file più piccoli da 500k righe l’uno e poi editi il primo
Su Windows le cose sono naturalmente più fastidiose:
ho sempre usato editor di testo derivanti dalle librerie Scintilla (SciTe ed Notepad++ in primis), sono belle potenti ma hanno il bruttissimo difetto di diventare praticamente inutili quando si trovano di fronte file grossi.
Update 1: mi è venuto in mente che in realtà per Windows Server esiste un resource kit contenente il tail.
Oppure si può usare il comando more +numero_di_righe.
Resta il fatto che non esiste il comando split nativo, bisogna giocare con il rognoso FOR di DOS.
Soluzione commerciale il caro vecchio UltraEdit, che è a pagamento ma devo dire, non mi ha mai deluso.
Cercando su Stackoverflow ho poi trovato una chicca: TheGun un vecchio editor scritto in assembler e il suo successore, TopGun
Il primo è riuscito ad aprire il file ma aveva problemi nel modificarlo, il secondo ha aperto il file e mi ha permesso di modificarlo come UltraEdit.
Ora, naturalmente in quesot caso si lavorava a bocce ferme e mi sto iniziando a studiare il funziamento degli ETL con Pentaho, perchè non ho a disposizione SSIS di Microsoft, ma la curiosità mi è rimasta.
Quali consigli avete per editare GROSSI file di testo? Script/linguaggi/editor, qualsiasi suggerimento è gradito.