Em produção, nosso banco de dados tem algumas centenas de gigabytes de tamanho. Para desenvolvimento e teste, precisamos criar instantâneos desse banco de dados que sejam funcionalmente equivalentes, mas que tenham apenas 10 ou 20 GB de tamanho.
O desafio é que os dados de nossas entidades de negócios estão espalhados por muitas tabelas. Queremos criar algum tipo de instantâneo filtrado para que apenas algumas das entidades sejam incluídas no dump. Dessa forma, podemos obter novos instantâneos a cada mês ou mais para desenvolvimento e teste.
Por exemplo, digamos que temos entidades que têm esses relacionamentos muitos para muitos:
- Empresa tem N divisões
- Divisão tem N Funcionários
- O funcionário tem N registros de frequência
Existem talvez 1.000 empresas, 2.500 divisões, 175.000 funcionários e dezenas de milhões de registros de atendimento. Queremos uma maneira replicável de obter, digamos, as primeiras 100 empresas e todas as suas divisões constituintes, funcionários e registros de frequência .
Atualmente usamos o pg_dump para o esquema, e então executamos o pg_dump com --disable-triggers e --data-only para obter todos os dados das tabelas menores. Não queremos ter que escrever scripts personalizados para extrair parte dos dados porque temos um ciclo de desenvolvimento rápido e estamos preocupados que os scripts personalizados sejam frágeis e provavelmente desatualizados.
Como podemos fazer isso? Existem ferramentas de terceiros que podem ajudar a extrair partições lógicas do banco de dados? Como são chamadas essas ferramentas?
Qualquer conselho geral também será apreciado!