Ho un database su PostgreSQL 9.2 che ha uno schema principale con circa 70 tabelle e un numero variabile di schemi per client strutturati in modo identico di 30 tabelle ciascuno. Gli schemi client hanno chiavi esterne che fanno riferimento allo schema principale e non viceversa.
Ho appena iniziato a riempire il database con alcuni dati reali presi dalla versione precedente. Il DB aveva raggiunto circa 1,5 GB (si prevede che raggiungesse i 10 GB entro alcune settimane) quando ho dovuto eseguire una cancellazione di massa in una tabella molto centrale nello schema principale. Tutte le chiavi esterne interessate sono contrassegnate ON ELIMINA CASCATA.
Non è stata una sorpresa che ci sarebbe voluto molto tempo, ma dopo 12 ore è diventato chiaro che stavo meglio ricominciando, lasciando il DB e riavviando la migrazione. Ma cosa succede se devo ripetere questa operazione in seguito quando il DB è attivo e molto più grande? Esistono metodi alternativi e più veloci?
Sarebbe molto più veloce se scrivessi uno script che sfoglierà le tabelle dipendenti, iniziando dalla tabella più lontana dalla tabella centrale, eliminando le righe dipendenti tabella per tabella?
Un dettaglio importante è che ci sono trigger su alcune delle tabelle.