Tengo una base de datos en PostgreSQL 9.2 que tiene un esquema principal con alrededor de 70 tablas y un número variable de esquemas idénticamente estructurados por cliente de 30 tablas cada uno. Los esquemas del cliente tienen claves externas que hacen referencia al esquema principal y no al revés.
Acabo de comenzar a llenar la base de datos con algunos datos reales tomados de la versión anterior. La base de datos había alcanzado aproximadamente 1.5 GB (se espera que crezca a varios 10 GB en semanas) cuando tuve que hacer una eliminación masiva en una tabla muy central en el esquema principal. Todas las claves foráneas en cuestión están marcadas EN ELIMINAR CASCADA.
No fue una sorpresa que esto llevara mucho tiempo, pero después de 12 horas quedó claro que era mejor comenzar de nuevo, dejar caer la base de datos y volver a iniciar la migración. Pero, ¿qué sucede si necesito repetir esta operación más tarde cuando el DB está activo y es mucho más grande? ¿Existen métodos alternativos y más rápidos?
¿Sería mucho más rápido si escribiera un script que explorara las tablas dependientes, comenzando en la tabla más alejada de la tabla central, eliminando las filas dependientes tabla por tabla?
Un detalle importante es que hay desencadenantes en algunas de las tablas.