У мене є база даних на PostgreSQL 9.2, яка має основну схему з приблизно 70 таблицями та змінною кількістю однаково структурованих схем для кожного клієнта по 30 таблиць кожна. Клієнтські схеми мають зовнішні ключі, що посилаються на основну схему, а не навпаки.
Я тільки почав заповнювати базу даних деякими реальними даними, взятими з попередньої версії. База даних склала близько 1,5 ГБ (очікується, що вона зросте до декількох 10 Гб протягом тижнів), коли мені довелося зробити групове видалення в дуже центральній таблиці основної схеми. Усі закордонні закордонні ключі маркуються НА ВИДАЛЕНОМ КАСКАДІ.
Не дивно, що це займе багато часу, але через 12 годин стало зрозуміло, що мені краще починати спочатку, скидаючи БД і запускаючи міграцію знову. Але що робити, якщо мені потрібно буде повторити цю операцію пізніше, коли БД живе і значно більшим? Чи існують альтернативні, більш швидкі методи?
Чи було б набагато швидше, якби я написав сценарій, який перегляне залежні таблиці, починаючи від таблиці, віддалену від центральної таблиці, видаляючи залежні рядки таблиці за таблицею?
Важливою деталлю є те, що на деяких таблицях є тригери.