En producción, nuestra base de datos tiene un tamaño de unos cientos de gigabytes. Para el desarrollo y las pruebas, necesitamos crear instantáneas de esta base de datos que sean funcionalmente equivalentes, pero que solo tengan un tamaño de 10 o 20 gigas.
El desafío es que los datos de nuestras entidades comerciales se encuentran dispersos en muchas tablas. Queremos crear algún tipo de instantánea filtrada para que solo algunos de las entidades se incluyan en el volcado. De esa manera, podemos obtener instantáneas nuevas cada mes para desarrollo y pruebas.
Por ejemplo, digamos que tenemos entidades que tienen estas relaciones de varios a varios:
- La empresa tiene N divisiones
- La división tiene N empleados
- El empleado tiene N registros de asistencia
Quizás haya 1000 empresas, 2500 divisiones, 175000 empleados y decenas de millones de registros de asistencia. Queremos una forma replicable de extraer, digamos, las primeras 100 empresas y todas sus divisiones constituyentes, empleados y registros de asistencia. .
Actualmente usamos pg_dump para el esquema, y luego ejecutamos pg_dump con --disable-triggers y --data-only para obtener todos los datos de las tablas más pequeñas. No queremos tener que escribir scripts personalizados para extraer parte de los datos porque tenemos un ciclo de desarrollo rápido y nos preocupa que los scripts personalizados sean frágiles y probablemente estén desactualizados.
¿Cómo podemos hacer esto? ¿Existen herramientas de terceros que puedan ayudar a extraer particiones lógicas de la base de datos? ¿Cómo se llaman estas herramientas?
¡Cualquier consejo general también se agradece!
fuente
\copy
lugar deCOPY
también, porque este último era solo para superusuarios. Afortunadamente, todo lo demás funcionó perfectamente sin otros cambios en la 9.1.No conozco ningún software que ya haga esto, pero puedo pensar en 3 soluciones alternativas. Desafortunadamente, todos requieren una codificación personalizada.
Vuelva a crear todas las tablas en un esquema separado, luego copie en esas tablas solo el subconjunto de datos que le gustaría volcar, usar
INSERT INTO copy.tablename SELECT * FROM tablename WHERE ...
y volcar eso.Escriba su propio script para volcar datos como declaraciones SQL. He usado este enfoque en el pasado y solo tomó alrededor de 20-30 líneas de PHP.
Modifique pg_dump para que acepte una condición junto con el modificador -t al volcar una sola tabla.
fuente
http://jailer.sourceforge.net/ hace esto.
fuente
how
uso de esta herramienta, podríamos entender cómo logra el objetivo