Ana içeriğe geç

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

  1. Expand: Yeni kolon/tablo ekle (nullable veya default ile)
  2. Backfill: Mevcut verileri doldur
  3. 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

  1. Önce kod referanslarını kaldır (import, query, relationship)
  2. Bir sonraki release'de migration ile tabloyu sil
  3. 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