דלגו לתוכן

Environment Diff

תכונת Environment Diff מאפשרת לך להשוות את סכמות מסד הנתונים של שתי סביבות זה לצד זה. זה שימושי להבנת שינויי סכמה שבוצעו בענף לפני מיזוגו חזרה להורה, או לביצוע ביקורת על הבדלים מבניים בין כל שתי סביבות.

השוואת diff סכמת סביבות


מנוע ההשוואה מזהה הבדלים מבניים בין סביבות בשלושה שלבים:

  1. ניתוח סכמה: המערכת בודקת את שתי סביבות המקור והיעד כדי להבין את המבנה המלא שלהן — כולל טבלאות, עמודות, אינדקסים, אילוצים ויחסים.
  2. השוואה: שני המבנים מושווים לפי סמנטיקת קדימה בלבד (המסבירה להלן). המנוע מזהה בדיוק אילו שינויים מסביבת המקור חסרים ביעד.
  3. יצירת מיגרציה: לכל שינוי שזוהה, המערכת מייצרת אוטומטית את פקודות ה-SQL המתאימות הנדרשות כדי להחיל את השינוי הזה על סביבת היעד בצורה בטוחה.

מנוע ה-diff משתמש בסמנטיקת קדימה בלבד. זה אומר:

  • אובייקטים שקיימים במקור אך לא ביעד → מוצגים כ-CREATED (צריך ליצור אותם ביעד)
  • אובייקטים שקיימים בשניהם → מושווים שדה לשדה, הבדלים מוצגים כשינויים
  • אובייקטים שקיימים רק ביעדלא מוצגים כ-DROPPED

זו החלטת עיצוב חשובה. אם טבלה קיימת רק בסביבת היעד, היא מעולם לא הייתה במקור. להציג אותה כ-TABLE_DROPPED יהיה מטעה כי פעולת drop לא בוצעה מעולם במקור. ה-diff מתמקד אך ורק בשינויים שמקורם במקור וצריכים להיות מופצים ליעד.

חריג: עבור שינויים ברמת עמודה בתוך טבלאות שקיימות בשתי הסביבות, COLUMN_DROPPED כן מזוהה כי הוא מייצג פעולת הסרת עמודה ממשית שבוצעה במקור.


מנוע ה-diff מזהה את הקטגוריות הבאות של שינויי סכמה:

סוג שינויתיאורBreaking
TABLE_CREATEDטבלה קיימת במקור אך לא ביעדלא
COLUMN_ADDEDעמודה חדשה נוספה לטבלה במקורלא
COLUMN_DROPPEDעמודה קיימת ביעד אך הוסרה במקורכן
COLUMN_TYPE_CHANGEDסוג הנתונים של עמודה שונהתלוי*
COLUMN_NULLABLE_CHANGEDאילוץ ה-nullable של עמודה שונהתלוי
COLUMN_DEFAULT_CHANGEDערך ברירת המחדל של עמודה שונהלא
INDEX_CREATEDאינדקס חדש נוסףלא
INDEX_DROPPEDאינדקס הוסרלא
ENUM_CREATEDסוג enum חדש קיים במקור אך לא ביעדלא
ENUM_VALUE_ADDEDערך חדש נוסף ל-enumלא
ENUM_VALUE_REMOVEDערך הוסר מ-enumכן
VIEW_CREATEDview קיים במקור אך לא ביעדלא
VIEW_MODIFIEDהגדרת ה-SQL של view שונתהלא
RELATIONSHIP_ADDEDיחס מפתח זר חדש נוסףלא
RELATIONSHIP_DROPPEDיחס מפתח זר הוסרכן

* צמצום סוג (למשל textvarchar(50) או int8int4) מסווג כ-breaking כי יכול לגרום לאובדן נתונים. הרחבת סוג (למשל varchartext) מסווגת כבטוחה.

הערה: TABLE_DROPPED, ENUM_DROPPED ו-VIEW_DROPPED ברמה העליונה לא נוצרים על ידי diff קדימה בלבד. אובייקטים שקיימים רק ביעד לא נחשבים “הוסרו” מנקודת המבט של המקור.


תצוגת ה-diff תומכת ביישום שינויים סלקטיבי. משתמשים יכולים:

  • לבחור או לבטל בחירה של שינויים בודדים באמצעות תיבות סימון
  • לבחור או לבטל בחירה של כל השינויים בתוך קבוצה (למשל כל השינויים לטבלה מסוימת) באמצעות תיבת הסימון של הקבוצה
  • שינויים Breaking (הרסניים) לא נבחרים מראש כברירת מחדל — המשתמש חייב לבחור במפורש

רק שינויים שנבחרו ייכללו בעת יישום ה-merge.


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"
}
}

כל רשומה במערך changes מייצגת שינוי סכמה בודד עם השדות הבאים:

  • changeType: אחד מזהה סוג השינוי המפורטים למעלה.
  • objectType: סוג אובייקט מסד הנתונים המושפע (table, column, index, enum, view, relationship).
  • objectName: שם האובייקט המושפע (למשל שם הטבלה).
  • fieldName: עבור שינויים ברמת עמודה, שם העמודה הספציפית.
  • oldValue / newValue: הערכים לפני ואחרי לשינויים (למשל "varchar(255)""text").
  • isBreaking: בוליאני המציין אם שינוי זה עלול לגרום לאובדן נתונים או שבירת API.
  • sql: הצהרת ה-DDL שנוצרה להחלת שינוי זה.