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

כיצד Diff עובד
Section titled “כיצד Diff עובד”מנוע ההשוואה מזהה הבדלים מבניים בין סביבות בשלושה שלבים:
- ניתוח סכמה: המערכת בודקת את שתי סביבות המקור והיעד כדי להבין את המבנה המלא שלהן — כולל טבלאות, עמודות, אינדקסים, אילוצים ויחסים.
- השוואה: שני המבנים מושווים לפי סמנטיקת קדימה בלבד (המסבירה להלן). המנוע מזהה בדיוק אילו שינויים מסביבת המקור חסרים ביעד.
- יצירת מיגרציה: לכל שינוי שזוהה, המערכת מייצרת אוטומטית את פקודות ה-SQL המתאימות הנדרשות כדי להחיל את השינוי הזה על סביבת היעד בצורה בטוחה.
סמנטיקת Diff קדימה בלבד
Section titled “סמנטיקת Diff קדימה בלבד”מנוע ה-diff משתמש בסמנטיקת קדימה בלבד. זה אומר:
- אובייקטים שקיימים במקור אך לא ביעד → מוצגים כ-
CREATED(צריך ליצור אותם ביעד) - אובייקטים שקיימים בשניהם → מושווים שדה לשדה, הבדלים מוצגים כשינויים
- אובייקטים שקיימים רק ביעד → לא מוצגים כ-
DROPPED
זו החלטת עיצוב חשובה. אם טבלה קיימת רק בסביבת היעד, היא מעולם לא הייתה במקור. להציג אותה כ-TABLE_DROPPED יהיה מטעה כי פעולת drop לא בוצעה מעולם במקור. ה-diff מתמקד אך ורק בשינויים שמקורם במקור וצריכים להיות מופצים ליעד.
חריג: עבור שינויים ברמת עמודה בתוך טבלאות שקיימות בשתי הסביבות, COLUMN_DROPPED כן מזוהה כי הוא מייצג פעולת הסרת עמודה ממשית שבוצעה במקור.
סוגי שינוי
Section titled “סוגי שינוי”מנוע ה-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_CREATED | view קיים במקור אך לא ביעד | לא |
VIEW_MODIFIED | הגדרת ה-SQL של view שונתה | לא |
RELATIONSHIP_ADDED | יחס מפתח זר חדש נוסף | לא |
RELATIONSHIP_DROPPED | יחס מפתח זר הוסר | כן |
* צמצום סוג (למשל text → varchar(50) או int8 → int4) מסווג כ-breaking כי יכול לגרום לאובדן נתונים. הרחבת סוג (למשל varchar → text) מסווגת כבטוחה.
הערה: TABLE_DROPPED, ENUM_DROPPED ו-VIEW_DROPPED ברמה העליונה לא נוצרים על ידי diff קדימה בלבד. אובייקטים שקיימים רק ביעד לא נחשבים “הוסרו” מנקודת המבט של המקור.
בחירת Cherry-Pick
Section titled “בחירת Cherry-Pick”תצוגת ה-diff תומכת ביישום שינויים סלקטיבי. משתמשים יכולים:
- לבחור או לבטל בחירה של שינויים בודדים באמצעות תיבות סימון
- לבחור או לבטל בחירה של כל השינויים בתוך קבוצה (למשל כל השינויים לטבלה מסוימת) באמצעות תיבת הסימון של הקבוצה
- שינויים Breaking (הרסניים) לא נבחרים מראש כברירת מחדל — המשתמש חייב לבחור במפורש
רק שינויים שנבחרו ייכללו בעת יישום ה-merge.
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
Section titled “הבנת פלט ה-Diff”כל רשומה במערך changes מייצגת שינוי סכמה בודד עם השדות הבאים:
changeType: אחד מזהה סוג השינוי המפורטים למעלה.objectType: סוג אובייקט מסד הנתונים המושפע (table,column,index,enum,view,relationship).objectName: שם האובייקט המושפע (למשל שם הטבלה).fieldName: עבור שינויים ברמת עמודה, שם העמודה הספציפית.oldValue/newValue: הערכים לפני ואחרי לשינויים (למשל"varchar(255)"→"text").isBreaking: בוליאני המציין אם שינוי זה עלול לגרום לאובדן נתונים או שבירת API.sql: הצהרת ה-DDL שנוצרה להחלת שינוי זה.