Bagaimana Anda membuat perubahan skema ke database langsung tanpa downtime?
Sebagai contoh, katakanlah saya memiliki database PostgreSQL dengan tabel termasuk berbagai data pengguna seperti alamat email dll, semua terkait dengan pengguna tertentu. Jika saya ingin memindahkan alamat email ke tabel khusus baru, saya harus mengubah skema dan kemudian memigrasikan data email ke tabel baru. Bagaimana ini bisa dilakukan tanpa berhenti menulis ke meja asli? Tentunya sementara data dituliskan dari tabel lama ke yang baru, data baru akan terus ditulis ke meja lama dan dilewatkan, bukan?
Saya kira masalah ini cukup sering muncul tetapi saya tidak dapat menemukan solusi standar untuk mengatasinya.
Artikel ini membahas masalah tetapi saya tidak benar-benar mengerti langkah 3. Dia mengatakan untuk menulis ke kedua tabel, lalu memigrasikan data lama dari tabel pertama ke yang baru. Bagaimana Anda memastikan Anda hanya memigrasi data lama?
(Saya menggunakan PostgreSQL di Heroku .)
sumber
Jawaban:
Anda hampir memiliki jawaban Anda:
Adapun langkah 3 , gunakan sesuatu seperti ini (dalam satu transaksi):
Masukkan apa yang belum ada:
Perbarui yang telah berubah sementara itu:
Data baru tidak akan disentuh, karena identik di kedua tempat.
sumber