In produzione il nostro database ha una dimensione di poche centinaia di gigabyte. Per lo sviluppo e il test, abbiamo bisogno di creare istantanee di questo database che siano funzionalmente equivalenti, ma che abbiano una dimensione di soli 10 o 20 GB.
La sfida è che i dati per le nostre entità aziendali sono sparsi su molte tabelle. Vogliamo creare una sorta di istantanea filtrata in modo che solo alcune delle entità siano incluse nel dump. In questo modo possiamo ottenere nuove istantanee ogni mese circa per lo sviluppo e il test.
Ad esempio, supponiamo di avere entità che hanno queste relazioni molti-a-molti:
- L'azienda ha N divisioni
- La divisione ha N dipendenti
- Il dipendente ha N record di presenze
Ci sono forse 1000 aziende, 2500 divisioni, 175000 dipendenti e decine di milioni di record di presenze. Vogliamo un modo replicabile per estrarre, ad esempio, le prime 100 società e tutte le divisioni, i dipendenti e i record di presenze che lo compongono .
Attualmente utilizziamo pg_dump per lo schema, quindi eseguiamo pg_dump con --disable-triggers e --data-only per estrarre tutti i dati dalle tabelle più piccole. Non vogliamo dover scrivere script personalizzati per estrarre parte dei dati perché abbiamo un ciclo di sviluppo veloce e siamo preoccupati che gli script personalizzati sarebbero fragili e probabilmente non aggiornati.
Come possiamo farlo? Esistono strumenti di terze parti che possono aiutare a estrarre le partizioni logiche dal database? Come si chiamano questi strumenti?
Apprezzato anche qualsiasi consiglio generale!