Environment Diff
Environment Diff özelliği, iki ortamın veritabanı şemalarını yan yana karşılaştırmanızı sağlar. Bir dalı ebeveynine merge etmeden önce hangi şema değişikliklerinin yapıldığını anlamak veya herhangi iki ortam arasındaki yapısal farkları denetlemek için kullanışlıdır.

Diff Nasıl Çalışır
Section titled “Diff Nasıl Çalışır”Karşılaştırma motoru, ortamlar arasındaki yapısal farkları üç aşamada tanımlar:
- Şema Analizi: Sistem hem kaynak hem hedef ortamları, tablolar, sütunlar, indeksler, kısıtlamalar ve ilişkiler dahil tam yapılarını anlamak için inceler.
- Karşılaştırma: İki yapı aşağıda açıklanan yalnızca ileri semantiğine göre karşılaştırılır. Motor, kaynak ortamdan hedefte eksik olan değişiklikleri tam olarak tanımlar.
- Migrasyon Üretimi: Her tespit edilen değişiklik için sistem, o değişikliği hedef ortama güvenle uygulamak için gereken karşılık gelen SQL komutlarını otomatik olarak üretir.
Yalnızca İleri Diff Semantiği
Section titled “Yalnızca İleri Diff Semantiği”Diff motoru yalnızca ileri semantiği kullanır. Bu şu anlama gelir:
- Kaynakta var ama HEDEFTE OLMAYAN nesneler →
CREATEDolarak gösterilir (hedefte oluşturulmaları gerekir) - HER İKİSİNDE de var olan nesneler → alan alan karşılaştırılır, farklar değişiklik olarak gösterilir
- Yalnızca HEDEFTE var olan nesneler →
DROPPEDolarak gösterilmez
Bu önemli bir tasarım kararıdır. Bir tablo yalnızca hedef ortamda varsa, kaynakta hiç bulunmamıştır. TABLE_DROPPED olarak göstermek yanıltıcı olurdu çünkü kaynakta hiçbir drop işlemi gerçekleştirilmemiştir. Diff yalnızca kaynakta köken alan ve hedefe yayılması gereken değişikliklere odaklanır.
İstisna: Her iki ortamda da var olan tablolar içindeki sütun düzeyi değişiklikler için COLUMN_DROPPED tespit edilir çünkü kaynakta gerçekleştirilen gerçek bir sütun kaldırma işlemini temsil eder.
Değişiklik Türleri
Section titled “Değişiklik Türleri”Diff motoru aşağıdaki şema değişikliği kategorilerini tespit eder:
| Değişiklik Türü | Açıklama | Breaking |
|---|---|---|
TABLE_CREATED | Tablo kaynakta var ama hedefte yok | Hayır |
COLUMN_ADDED | Kaynakta bir tabloya yeni sütun eklendi | Hayır |
COLUMN_DROPPED | Sütun hedefte var ama kaynakta kaldırıldı | Evet |
COLUMN_TYPE_CHANGED | Sütunun veri tipi değiştirildi | Duruma bağlı* |
COLUMN_NULLABLE_CHANGED | Sütunun nullable kısıtlaması değiştirildi | Duruma bağlı |
COLUMN_DEFAULT_CHANGED | Sütunun varsayılan değeri değiştirildi | Hayır |
INDEX_CREATED | Yeni indeks eklendi | Hayır |
INDEX_DROPPED | İndeks kaldırıldı | Hayır |
ENUM_CREATED | Yeni enum tipi kaynakta var ama hedefte yok | Hayır |
ENUM_VALUE_ADDED | Enum’a yeni değer eklendi | Hayır |
ENUM_VALUE_REMOVED | Enum’dan değer kaldırıldı | Evet |
VIEW_CREATED | Görünüm kaynakta var ama hedefte yok | Hayır |
VIEW_MODIFIED | Görünümün SQL tanımı değiştirildi | Hayır |
RELATIONSHIP_ADDED | Yeni foreign key ilişkisi eklendi | Hayır |
RELATIONSHIP_DROPPED | Foreign key ilişkisi kaldırıldı | Evet |
* Tip daraltma (örn. text → varchar(50) veya int8 → int4) veri kaybına neden olabileceği için breaking olarak sınıflandırılır. Tip genişletme (örn. varchar → text) güvenli olarak sınıflandırılır.
Not: Üst düzey TABLE_DROPPED, ENUM_DROPPED ve VIEW_DROPPED yalnızca ileri diff tarafından üretilmez. Yalnızca hedefte var olan nesneler kaynak perspektifinden “kaldırılmış” olarak kabul edilmez.
Cherry-Pick Seçimi
Section titled “Cherry-Pick Seçimi”Diff görünümü seçici değişiklik uygulamasını destekler. Kullanıcılar:
- Onay kutuları kullanarak tek tek değişiklikleri seçebilir veya seçimini kaldırabilir
- Grup onay kutusu kullanarak bir gruptaki tüm değişiklikleri (örn. belirli bir tablo için) seçebilir veya seçimini kaldırabilir
- Breaking (yıkıcı) değişiklikler varsayılan olarak önceden seçili değildir — kullanıcı açıkça onaylamalıdır
Yalnızca seçilen değişiklikler merge uygulanırken dahil edilir.
GraphQL API
Section titled “GraphQL API”Query: environmentDiff
Section titled “Query: environmentDiff”query EnvironmentDiff($input: EnvironmentDiffInput!) { environmentDiff(input: $input) { success message changes { changeType objectType objectName fieldName oldValue newValue isBreaking sql } summary { totalChanges breakingChanges addedTables droppedTables modifiedTables } }}Variables:
{ "input": { "projectId": "f7e4a264-d659-4719-91e8-c2d74654e529", "sourceEnvironment": "master", "targetEnvironment": "staging" }}Diff Çıktısını Anlama
Section titled “Diff Çıktısını Anlama”changes dizisindeki her giriş, aşağıdaki alanlarla tek bir şema değişikliğini temsil eder:
changeType: Yukarıda listelenen değişiklik türü tanımlayıcılarından biri.objectType: Etkilenen veritabanı nesnesinin türü (table,column,index,enum,view,relationship).objectName: Etkilenen nesnenin adı (örn. tablo adı).fieldName: Sütun düzeyi değişiklikler için spesifik sütunun adı.oldValue/newValue: Değişiklikler için önceki ve sonraki değerler (örn."varchar(255)"→"text").isBreaking: Bu değişikliğin veri kaybına veya API kırılmasına neden olup olamayacağını gösteren boolean.sql: Bu değişikliği uygulamak için üretilen DDL ifadesi.