Mam bazę danych PostgreSQL 9.2, która ma główny schemat z około 70 tabelami i zmienną liczbą identycznie ustrukturyzowanych schematów dla każdego klienta po 30 tabel. Schematy klienta mają klucze obce odnoszące się do głównego schematu, a nie na odwrót.
Właśnie zacząłem wypełniać bazę danych prawdziwymi danymi zaczerpniętymi z poprzedniej wersji. Baza danych osiągnęła około 1,5 GB (oczekuje się, że w ciągu tygodni wzrośnie do kilku 10 GB), kiedy musiałem wykonać zbiorcze usunięcie w bardzo centralnej tabeli w głównym schemacie. Wszystkie zainteresowane klucze obce są oznaczone NA USUŃ KASKADĘ.
Nie było zaskoczeniem, że zajmie to dużo czasu, ale po 12 godzinach stało się jasne, że lepiej zacząć od początku, porzucając DB i ponownie uruchamiając migrację. Ale co, jeśli będę musiał powtórzyć tę operację później, gdy DB będzie aktywne i znacznie większe? Czy istnieją alternatywne, szybsze metody?
Czy byłoby znacznie szybciej, gdybym napisał skrypt, który będzie przeglądał zależne tabele, zaczynając od tabeli najdalej od tabeli centralnej, usuwając zależne wiersze tabela po tabeli?
Ważnym szczegółem jest to, że niektóre tabele zawierają wyzwalacze.