Migration Rehberi
Veritabanı şema değişiklikleri Alembic ile yönetilir. Her migration production-critical'dir.
Komutlar
# Yeni migration oluştur
cd backend && alembic revision --autogenerate -m "açıklama"
# Migration uygula
alembic upgrade head
# Son migration'ı geri al
alembic downgrade -1
# Mevcut durumu kontrol et
alembic current
Güvenli Migration Pattern'leri
Expand → Backfill → Contract
- Expand: Yeni kolon/tablo ekle (nullable veya default ile)
- Backfill: Mevcut verileri doldur
- Contract: Eski kolon/tabloyu kaldır (sonraki release'de)
Yeni Kolon Ekleme
# ✅ Doğru: nullable veya server_default ile
op.add_column('devices', sa.Column('device_role', sa.String(), nullable=True))
# ❌ Yanlış: NOT NULL direkt ekleme (mevcut satırlar hata verir)
op.add_column('devices', sa.Column('device_role', sa.String(), nullable=False))
Tablo Silme
- Önce kod referanslarını kaldır (import, query, relationship)
- Bir sonraki release'de migration ile tabloyu sil
- Asla aynı PR'da kod + tablo silme yapma
Kurallar
- Migration test edilmeden asla merge edilmez
- TimescaleDB hypertable →
op.execute()ile raw SQL - Büyük tablolarda index ekleme →
CREATE INDEX CONCURRENTLY - Kolon rename → yeni kolon ekle, backfill, eski kolonu sil