Ich habe eine Datenbank auf PostgreSQL 9.2, die ein Hauptschema mit ungefähr 70 Tabellen und eine variable Anzahl von identischen Schemata pro Client mit jeweils 30 Tabellen enthält. Die Client-Schemas haben Fremdschlüssel, die auf das Hauptschema verweisen und nicht umgekehrt.
Ich habe gerade angefangen, die Datenbank mit echten Daten aus der Vorgängerversion zu füllen. Die Datenbank hatte ungefähr 1,5 GB erreicht (es wird erwartet, dass sie innerhalb weniger Wochen auf mehrere 10 GB anwächst), als ich in einer sehr zentralen Tabelle im Hauptschema einen Massenlöschvorgang durchführen musste. Alle betroffenen Fremdschlüssel sind mit ON DELETE CASCADE gekennzeichnet.
Es war keine Überraschung, dass dies lange dauern würde, aber nach 12 Stunden wurde klar, dass es mir besser geht, von vorne zu beginnen, die Datenbank zu löschen und die Migration erneut zu starten. Aber was ist, wenn ich diesen Vorgang später wiederholen muss, wenn die Datenbank aktiv und viel größer ist? Gibt es alternative, schnellere Methoden?
Wäre es viel schneller, wenn ich ein Skript schreiben würde, das die abhängigen Tabellen durchsucht, beginnend mit der Tabelle, die am weitesten von der zentralen Tabelle entfernt ist, und die abhängigen Zeilen tabellenweise löscht?
Ein wichtiges Detail ist, dass einige Tabellen Trigger enthalten.