Kami memiliki postgres produksi yang relatif besar berdasarkan db: ~ 20GB. Basis data PostgreSQL di-host di heroku.
Saya ingin menyalin sebagian kecil data tabel ke database lokal saya sehingga saya dapat menjalankan beberapa tes pada mereka tanpa harus bekerja pada produksi.
Saya tidak ingin menghasilkan data sampel sendiri, melainkan menggunakan data yang sudah ada di lingkungan produksi.
~ 100 baris dari setiap tabel dalam database sudah cukup. Apakah ada cara mudah untuk mencapai ini?
postgresql
heroku
jottr
sumber
sumber
Jawaban:
Saya belum pernah menggunakan alat ini, tetapi Jailer berjanji untuk melakukan hal itu
http://sourceforge.net/projects/jailer/
sumber
Penjara dapat membantu dalam situasi ini. Saya sedang mengerjakan yang sama dengan milik Anda (mencoba untuk mendapatkan ~ 100 catatan dari setiap tabel) dan di sini adalah langkah-langkah yang saya lakukan: - Temukan entitas root (yang terkait dengan hampir tabel) dan dapatkan subset dari catatan dari suatu baris akar (mis. root adalah orang, maka saya akan mencari semua catatan terkait ke people.id = 1 ...) - Setelah menyelesaikan langkah 1, mulai lagi dengan tabel lain (yang ingin Anda miliki 100 catatan ) dan dapatkan bagiannya dari hasil di atas.
sumber
Pilihan lain adalah sesuatu yang saya baru-baru ini menemukan (diberikan, saya belum menggunakannya, tapi rencana untuk segera):
rdbms-subsetter
.Ini sedikit lebih sederhana dan lebih ringan dari Jailer, dengan beberapa fitur bagus:
Perlu disebutkan opsi lain untuk basis data Heroku secara khusus, yang telah saya gunakan banyak (seperti dulu bekerja di sana).
Heroku sebenarnya cukup cepat dalam memunculkan DB snapshotted baru saat menarik log write-ahead terlebih dahulu untuk dipersiapkan, kemudian menghubungkan ke DB utama untuk mengejar ketinggalan, kemudian berhenti mengikutinya. Anda dapat membuat "garpu" ini di seluruh aplikasi untuk menghindari terlalu banyak memengaruhi produksi:
Kemudian, Anda dapat mem-boot aplikasi Anda secara lokal menunjuk ke snapshot itu. Saya sering menggunakan ini untuk menjalankan migrasi data atau skema atau men-debug masalah pelanggan.
Dalam perintah di atas, jika Anda memiliki DB yang dapat diakses dengan
DATABASE_URL
onyour-production-app
, Anda akan berakhir dengan DB yang dapat diakses denganPRODUCTION_SNAPSHOT_URL
(jika Anda tentukan--as
) pada aplikasi yang berbeda bernamasome-other-app-to-own-forked-database
.sumber
Untuk mendapatkan rangkaian acak, Anda dapat menggunakan LIMIT seperti ini:
Ini adalah yang termudah dan hanya akan memilih 100 baris pertama yang ditemui PostreSQL. Mungkin 100 yang terakhir dimasukkan atau mungkin 100 yang pertama. Jika Anda membutuhkan sesuatu yang benar-benar acak, lihat jawaban Stackoverflow ini .
sumber
LIMIT
tidak akan berurusan dengan referensi FK. Misalnya: 100 baris dari tabel pesanan mungkin berisi pelanggan yang tidak ada saat mengekspor 100 baris dari tabel pelanggan.