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