Saat diproduksi, database kami berukuran beberapa ratus gigabyte. Untuk pengembangan dan pengujian, kita perlu membuat snapshot dari database ini yang secara fungsional setara, tetapi hanya berukuran 10 atau 20 gigs.
Tantangannya adalah data entitas bisnis kita tersebar di banyak tabel. Kami ingin membuat semacam snapshot yang difilter sehingga hanya beberapa entitas yang disertakan dalam dump. Dengan begitu kami bisa mendapatkan snapshot baru setiap bulan atau lebih untuk dev dan pengujian.
Misalnya, kita memiliki entitas yang memiliki hubungan banyak ke banyak ini:
- Perusahaan memiliki Divisi N.
- Divisi memiliki N Karyawan
- Karyawan memiliki N Catatan Kehadiran
Mungkin ada 1000 perusahaan, 2500 divisi, 175000 karyawan, dan puluhan juta catatan kehadiran. Kami ingin cara yang dapat direplikasi untuk menarik, katakanlah, 100 perusahaan pertama dan semua divisi, karyawan, dan catatan kehadirannya .
Saat ini kami menggunakan pg_dump untuk skema, lalu menjalankan pg_dump dengan --disable-triggers dan --data-only untuk mengeluarkan semua data dari tabel yang lebih kecil. Kami tidak ingin harus menulis skrip ubahsuaian untuk menarik sebagian data karena kami memiliki siklus pengembangan yang cepat dan khawatir skrip ubahsuaian tersebut akan rapuh dan kemungkinan kedaluwarsa.
Bagaimana kita bisa melakukan ini? Apakah ada alat pihak ketiga yang dapat membantu mengeluarkan partisi logis dari database? Apa alat ini disebut?
Saran umum apa pun juga dihargai!
sumber
\copy
bukanCOPY
juga, karena yang terakhir adalah superuser-satunya. Untungnya semuanya bekerja dengan sempurna tanpa perubahan lain di 9.1.Saya tidak tahu tentang perangkat lunak apa pun yang sudah melakukan ini, tetapi saya dapat memikirkan 3 solusi alternatif. Sayangnya, semuanya membutuhkan beberapa pengkodean khusus.
Buat ulang semua tabel dalam skema terpisah, lalu salin ke tabel tersebut hanya subset data yang ingin Anda buang, gunakan,
INSERT INTO copy.tablename SELECT * FROM tablename WHERE ...
dan buang itu.Tulis skrip Anda sendiri untuk membuang data sebagai pernyataan SQL. Saya telah menggunakan pendekatan ini di masa lalu dan hanya membutuhkan sekitar 20-30 baris PHP.
Ubah pg_dump sehingga menerima kondisi bersama dengan -t switch saat membuang satu tabel.
sumber
http://jailer.sourceforge.net/ melakukan ini.
sumber
how
Anda menggunakan alat ini, kami mungkin dapat memahami bagaimana alat ini mencapai tujuan