Veritabanı Migration Kalıpları
Üretim sistemleri için güvenli, geri alınabilir veritabanı şema değişiklikleri.
Ne Zaman Aktifleştirmeli
- Veritabanı tabloları oluştururken veya değiştirirken
- Sütun veya indeks eklerken/kaldırırken
- Veri migration'ları çalıştırırken (backfill, dönüştürme)
- Sıfır kesinti şema değişiklikleri planlarken
- Yeni bir proje için migration araçları kurarken
Temel İlkeler
- Her değişiklik bir migration'dır — üretim veritabanlarını asla manuel olarak değiştirmeyin
- Migration'lar üretimde sadece ileri — rollback'ler yeni forward migration'lar kullanır
- Şema ve veri migration'ları ayrıdır — tek migration'da DDL ve DML'yi asla karıştırmayın
- Migration'ları üretim boyutundaki veriye karşı test edin — 100 satırda çalışan migration 10M'de kilitlenebilir
- Migration'lar üretimde çalıştıktan sonra değişmezdir — üretimde çalışan migration'ı asla düzenlemeyin
Migration Güvenlik Kontrol Listesi
Herhangi bir migration uygulamadan önce:
- Migration UP ve DOWN'a sahip (veya açıkça geri alınamaz olarak işaretlenmiş)
- Büyük tablolarda tam tablo kilitleri yok (concurrent operasyonlar kullan)
- Yeni sütunlar varsayılanlara sahip veya nullable (varsayılan olmadan NOT NULL asla ekleme)
- İndeksler concurrent oluşturuluyor (mevcut tablolar için CREATE TABLE ile inline değil)
- Veri backfill şema değişikliğinden ayrı bir migration
- Üretim verisinin kopyasına karşı test edilmiş
- Rollback planı dokümante edilmiş
PostgreSQL Kalıpları
Güvenli Sütun Ekleme
Kesinti Olmadan İndeks Ekleme
Sütun Yeniden Adlandırma (Sıfır Kesinti)
Üretimde asla doğrudan yeniden adlandırmayın. Expand-contract kalıbını kullanın:
Güvenli Sütun Kaldırma
Büyük Veri Migration'ları
Prisma (TypeScript/Node.js)
İş Akışı
Şema Örneği
Özel SQL Migration
Prisma'nın ifade edemediği operasyonlar için (concurrent indeksler, veri backfill'leri):
Drizzle (TypeScript/Node.js)
İş Akışı
Şema Örneği
Django (Python)
İş Akışı
Veri Migration
golang-migrate (Go)
İş Akışı
Migration Dosyaları
Sıfır Kesinti Migration Stratejisi
Kritik üretim değişiklikleri için expand-contract kalıbını takip edin:


