No todo trabajo necesita la base de datos entera. Cuando desarrollas una funcionalidad en local, rara vez quieres un volcado de producción completo llenando tu disco y tardando una hora en importarse. Quieres el puñado de tablas que la funcionalidad realmente toca.
Lo mismo ocurre cuando estás depurando una sola tabla: reproducir un problema de datos en orders no requiere las otras 126 tablas, o haciendo una migración parcial, donde solo unas pocas tablas pasan a un nuevo servicio. En todos estos casos la pregunta es la misma: ¿cómo saco solo estas tablas de un volcado gigante, de forma limpia y rápida?
El enfoque sed/grep y por qué se rompe
La respuesta clásica es rebanar el archivo con sed entre las cabeceras de sección que mysqldump escribe para cada tabla:
# extrae la tabla users de un archivo mysqldump
sed -n '/-- Table structure for table `users`/,/-- Table structure for table/p' dump.sql > users.sql
Parece ingenioso y, en un volcado pequeño y ordenado, hasta podría funcionar una vez. En un archivo real de 7 GB se desmorona de muchas formas sutiles:
- INSERT multilínea. Un solo
INSERT INTO ... VALUESpuede abarcar miles de líneas. Las herramientas orientadas a líneas comosedygrepcortan esas filas por la mitad y producen un archivo que no se puede parsear. - Comillas invertidas y caracteres especiales. Los valores de columna contienen
--, puntos y comas, comillas invertidas, comillas y saltos de línea dentro de cadenas. Tu patrón coincide con texto dentro de los datos que nunca fue pensado como delimitador. - Nombres de tabla como subcadenas. Extraer
usertambién atrapauser_roles,user_sessionsypassword_user, porque el nombre aparece como subcadena de otros. - Comentarios y cabeceras que varían. El texto exacto de los comentarios cambia entre las versiones de MySQL, MariaDB y PostgreSQL, y
pg_dumpno usa las mismas cabeceras en absoluto, así que el mismo comando devuelve silenciosamente nada. - Sin conciencia de claves foráneas. Aunque rebanes
ordersa la perfección, sus filas referencianusers.sedno tiene ni idea, así que el extracto no se importa por un error de clave foránea.
Acabas apilando awk sobre grep sobre sed, probando con subconjuntos y aún sin fiarte del resultado. Hay una forma mejor.
Extrae tablas con DumpCleaner
DumpCleaner parsea el volcado correctamente: entiende los límites de las sentencias, los INSERT multilínea, las comillas invertidas y los comentarios, así que siempre corta en las líneas correctas. Extraer las tablas que necesitas lleva cuatro pasos:
- Arrastra tu volcado
.sql. DumpCleaner recorre el archivo en streaming, así que un volcado de 7 GB se abre con memoria constante en lugar de cargarlo entero. - Lee la lista de tablas autodetectada. Cada tabla se parsea y se lista con su número de filas y su tamaño: sin desplazarte por millones de líneas para encontrar lo que hay.
- Elige las tablas que quieres. Marca
users,ordersyproducts, o escribe una expresión regular / patrón de exclusión como*_logspara descartar grupos enteros de una vez. - Incluye los padres de las claves foráneas y exporta. Opcionalmente incorpora automáticamente las tablas padre referenciadas y luego exporta un archivo limpio y listo para importar.
Unas cuantas cosas hacen esto mucho menos engorroso que las herramientas de shell:
- Los patrones de exclusión como
*_logso*_sessionseliminan el ruido de auditoría y sesiones sin desmarcar decenas de tablas a mano. - Los filtros con expresiones regulares te permiten coincidir por prefijo, sufijo o cualquier patrón: conserva todo lo que coincida con
shop_*, por ejemplo. - Una vista previa en vivo muestra exactamente qué tablas acabarán en la salida a medida que cambias la selección.
- Un tamaño de salida estimado te dice cuán grande será el extracto antes de exportar, así sabes que cabrá en local.
- Las dependencias de claves foráneas se pueden incluir automáticamente, así que elegir
ordersarrastra discretamente ausersy el extracto se importa sin errores de restricción.
Solo las tablas que necesitas, nada más
DumpCleaner extrae tablas específicas de volcados de cualquier tamaño: en streaming, con memoria constante y con las claves foráneas resueltas por ti. App nativa para macOS e iPadOS, pago único.
Descargar en la App StorePreguntas frecuentes
¿Puedo extraer varias tablas a la vez?
Sí. Marca tantas tablas como quieras —users, orders y products juntas— y DumpCleaner las escribe todas en un único archivo en una sola pasada.
¿Conserva las dependencias de claves foráneas?
Opcionalmente, sí. Activa incluir dependencias de claves foráneas y cualquier tabla padre referenciada por tu selección se incorpora automáticamente, así que el extracto se importa sin errores de restricción.
¿Puedo excluir tablas por patrón?
Sí. Usa patrones de exclusión como *_logs o *_sessions, o una expresión regular, para descartar grupos enteros de tablas en lugar de desmarcarlas una a una.
¿Funciona con PostgreSQL?
Sí. DumpCleaner lee volcados de MySQL, MariaDB y PostgreSQL (pg_dump), y maneja nombres cualificados por esquema como public.users al extraer tablas.
Deja de pelear con sed y grep
Arrastra, elige tus tablas, exporta. DumpCleaner extrae exactamente las tablas que necesitas, con sus claves foráneas, de cualquier volcado.
Descargar en la App Store