Outra opção é algo que eu tenho apenas recentemente se deparar (concedido, ainda estou para usá-lo, mas plano para breve): rdbms-subsetter
.
É um pouco mais simples e mais leve que o Jailer, com alguns recursos / vantagens interessantes:
- CLI tão fácil de conectar às ferramentas existentes
- Código aberto
- Seguirá chaves estrangeiras para buscar um subconjunto coerente de dados
- Se você não tiver chaves estrangeiras bem definidas, os relacionamentos poderão ser fornecidos por meio de um arquivo de configuração JSON. No meu caso, pretendo gerar essa configuração a partir de metadados do esquema armazenados em outro local (obrigado, Rails: \)
- Você pode segmentar uma linha específica e obter todos os registros relacionados (por exemplo, um cliente específico está tendo problemas, para que você possa selecionar tudo para tornar a conta de trabalho dos dados acessíveis localmente)
- Ele pode levar um número constante de registros por tabela ou um logaritmo para obter mais dados de tabelas maiores sem exagerar.
Vale mencionar outra opção especificamente para os bancos de dados Heroku, que usei bastante (como costumava trabalhar lá).
O Heroku é realmente muito rápido em criar um novo banco de dados com instantâneo, pois ele puxa os logs write-ahead primeiro para se preparar, depois se conecta ao banco de dados principal para recuperar o atraso e para de segui-lo. Você pode criar esses "garfos" nos aplicativos para evitar afetar demais a produção:
$ heroku addons:create heroku-postgres[:specific-plan] \
--fork your-production-app::DATABASE \
--app some-other-app-to-own-forked-database \
[--as PRODUCTION_SNAPSHOT]
Em seguida, você pode inicializar seu aplicativo apontado localmente para esse instantâneo. Eu uso isso frequentemente para executar uma migração a seco de dados ou esquemas ou depurar problemas de clientes.
Nesse comando acima, se você tiver um banco de dados acessível com DATABASE_URL
on your-production-app
, você terminará com um banco de dados acessível com PRODUCTION_SNAPSHOT_URL
(se você especificou --as
) em um aplicativo diferente chamado some-other-app-to-own-forked-database
.