2012-02-09 18 views
6

abbiamo un database semi-grande che impiega molto tempo per importare localmente sulle nostre singole macchine dev. Mi chiedevo se esistessero strumenti che potessero connettersi a un database, fare una piccola analisi e prelevare un campione del database mantenendo tutte le relazioni tramite un parametro passato. Qualcosa come pg_sample - through_size 1000 --dbhost mydbhost --dbuname uname --dbpword pword crea un dump che posso importare nel mio database per test e sviluppo. Ma non ci vorranno 45 minuti per farlo.Plagiando un campione del vostro database - Postgresql

Grazie

+0

Questo sarebbe un compito difficile preservando l'integrità referenziale. Pensa alle relazioni 1: n in cui una riga nella tabella 'a' fa riferimento a 5000 righe nella tabella' b' ... –

+0

sono d'accordo, lo sarebbe. ecco perché speravo che fosse già scritto. ;) Tuttavia, se puoi anche fornirgli alcune classi base per iniziare, e prendi tutto in una tabella con un numero di record inferiore ai tuoi valori di rough_size. – Sector7B

+0

Mi piacerebbe un tale strumento. Posso sognare ... –

risposta

2

vi suggerisco di indagare pg_dump --format=custom e pg_restore -j 12. Il formato custom consente ripristini paralleli (e può essere scaricato su SQL raw se lo si desidera, quindi non si perde alcuna funzionalità qui). Il parametro -j su pg_restore fa in modo che esegua il ripristino in parallelo. Questo può fornire una sostanziale accelerazione. Soprattutto se hai ingrandito il tuo maintenance_work_mem.

Non risolverà il problema che hai chiesto direttamente per le ragioni delineate da Erwin sopra, e perché richiede un livello di conoscenza su ciò che è importante da rappresentare e ciò che non lo è che semplicemente non è nello schema . È qualcosa che richiede tempo per lo sviluppatore e dovrebbe generalmente essere fatto nello stesso momento in cui lo schema viene costruito in primo luogo.

+0

Thnk, indagherò e tornerò con alcuni dati. – Sector7B

4

Ho scritto un tale strumento: https://github.com/mla/pg_sample

Dal README:

pg_sample è un programma di utilità per l'esportazione di un piccolo, campione di set di dati da un database di grande PostgreSQL. L'output e le opzioni della riga di comando sono simili all'utilità di backup pg_dump (sebbene sia supportato solo il formato di testo semplice ).

Il database di esempio prodotto include tutte le tabelle dall'originale, mantiene l'integrità referenziale e supporta le dipendenze circolari.