Ana içeriğe geç
Kesit SQL
İleri · Uygulama Geliştirme

Şema değişikliklerini yönetmek: migration ve kesintisiz dağıtım

Sürümlü SQL betikleri, genişlet–daralt (expand–contract) yöntemi.

Uygulamada aç, 5 alıştırmayı çözÜcretsiz, hesap gerekmez, kurulum yok.

Bu sayfa dersin okuma sürümüdür. Metin bir kutuyu çalıştırmanı ya da adıma geçmeni söylüyorsa dersi uygulamada aç.

Migration nedir?

Veritabanı şeması da kod gibi sürümlenmelidir. Her değişiklik numaralı bir betikte tutulur (V12__add_phone.sql) ve araç hangi betiklerin uygulandığını veritabanındaki bir tabloda takip eder. Böylece geliştirme, test ve canlı ortam aynı sırayla aynı şemaya ulaşır.

EkosistemAraç
Java / genelFlyway, Liquibase
.NETEF Core Migrations, DbUp; SQL Server için SSDT / DACPAC
PythonAlembic, Django migrations
Node.jsPrisma Migrate, Knex

Kesintisiz değişiklik: genişlet–daralt

Çalışan bir uygulamada sütun adını değiştirmek (first_name + last_name → full_name) tek adımda yapılırsa, eski kod yeni şemayla çöker. Bunun yerine değişiklik geriye uyumlu adımlara bölünür:

  1. Genişlet: Yeni sütunu ekle (boş bırakılabilir), eski sütunlara dokunma.
  2. Doldur: Mevcut veriyi yeni sütuna kopyala (büyük tablolarda parça parça).
  3. Geçiş: Uygulama hem eskiye hem yeniye yazsın, sonra yalnızca yeniden okusun.
  4. Daralt: Hiçbir kod eski sütunu kullanmadığında eski sütunu kaldır.
-- 1. Genişlet
ALTER TABLE customers ADD COLUMN full_name TEXT;
-- 2. Doldur
UPDATE customers SET full_name = first_name || ' ' || last_name WHERE full_name IS NULL;
SELECT customer_id, first_name, last_name, full_name FROM customers LIMIT 3;
Büyük tablolarda kilitMilyonlarca satırlı bir tabloda tek seferlik UPDATE veya bazı ALTER işlemleri tabloyu uzun süre kilitler. Doldurma işlemi 5.000–10.000 satırlık partilerle, kısa işlemlerde yapılır.

İyi bir migration betiği

Alıştırmalara geç (5)