בדף הזה מוסבר איך להעביר טבלאות של Oracle שלא כוללות מפתחות ראשיים.
יצירה אוטומטית של מפתח ראשי מסביר איך Database Migration Service מטפל בטבלאות מקור שחסרים בהן מפתחות ראשיים.
Add missing primary keys manually מציג שאילתות לדוגמה שאפשר להשתמש בהן כדי להוסיף מפתחות ראשיים חסרים בסכימה שהומרה.
סקירה כללית על יצירה אוטומטית של מפתח ראשי
בטבלאות ללא מפתחות ראשיים לא מובטחת שכפול עקבי. Database Migration Service מעביר רק טבלאות שיש להן מפתחות ראשיים. אם מסד הנתונים של המקור כולל טבלאות ללא מפתחות ראשיים, Database Migration Service יכול לטפל בזה באחת מהדרכים הבאות:
- כש
ממירים את קוד המקור ואת הסכימה, Database Migration Service יכול ליצור באופן אוטומטי את המפתחות הראשיים שחסרים על ידי הוספת עמודות
ROWIDבטבלאות היעד. התהליך האוטומטי הזה מחייב את הדברים הבאים לגבי טבלאות המקור:- עדיין אין מפתחות ראשיים.
- אין אילוץ
UNIQUEללא עמודות שניתן להזין בהן ערך null. - אין אינדקס
UNIQUEללא עמודות שניתן להגדיר בהן ערך null.
- בסביבות עבודה להמרות מדור קודם, Database Migration Service לא יוצר מפתחות ראשיים באופן אוטומטי. אם אתם משתמשים בסביבת עבודה להמרות מדור קודם, אתם צריכים להוסיף באופן ידני מפתחות ראשיים חסרים לטבלאות בסכימת PostgreSQL שהומרה.
הוספה ידנית של מפתחות ראשיים חסרים
כדי להעביר טבלאות של Oracle ללא מפתחות ראשיים, צריך לבצע את הפעולות הבאות:
- משתמשים בסביבת עבודה להמרות כדי להמיר את קוד המקור ואת הסכימה.
- למידע על המרת סביבות עבודה רגילות, אפשר לעיין במאמר בנושא המרת קוד המקור והסכימה.
- למידע על מרחבי עבודה להמרות מדור קודם, אפשר לעיין במאמר עבודה עם מרחבי עבודה להמרות מדור קודם.
- מתחברים למכונת Cloud SQL של היעד באמצעות לקוח SQL. אפשר להשתמש באחת מהשיטות הבאות:
-
psqlclient. אפשר להשתמש בשיטה הזו כדי להתחבר לכתובת ה-IP הפרטית של המכונה, אבל יכול להיות שתצטרכו ליצור מכונה וירטואלית ב-Compute Engine. -
gcloud sql connect. הפקודה הזו פועלת רק במכונות Cloud SQL שמופעלת בהן כתובת IP ציבורית.
-
- יוצרים את אילוצי המפתח הראשי החסרים בטבלאות. מידע נוסף על מפתחות ראשיים זמין בקטע
מפתחות ראשיים במסמכי התיעוד של PostgreSQL.
אפשר גם להרחיב את הקטעים הבאים כדי לראות דוגמאות לפקודות SQL:
יצירת מפתחות ראשיים באמצעות עמודות קיימות
יכול להיות שלטבלה כבר יש מפתח ראשי לוגי שמבוסס על עמודה או על שילוב של עמודות. לדוגמה, יכול להיות שיש עמודות עם אילוץ ייחודי או אינדקס מוגדר. משתמשים בעמודות האלה כדי ליצור מפתח ראשי חדש לטבלאות במסד הנתונים של המקור. לדוגמה:
ALTER TABLE TABLE_NAME ADD PRIMARY KEY (COLUMN_NAME);
מחליפים את מה שכתוב בשדות הבאים:
- TABLE_NAME בשם הטבלה שאין לה מפתח ראשי.
- COLUMN_NAME עם השם של עמודה עם אילוץ ייחודי או אינדקס שאפשר להשתמש בו כמפתח ראשי.
יצירת מפתח ראשי באמצעות כל העמודות
אם אין לכם אילוץ קיים שיכול לשמש כמפתח ראשי, אתם יכולים ליצור מפתחות ראשיים באמצעות כל העמודות בטבלה. חשוב לוודא שלא חורגים מהאורך המקסימלי של המפתח הראשי שמותר במכונת PostgreSQL.
כשיוצרים מפתח ראשי מורכב בדרך הזו, צריך לציין במפורש את כל שמות העמודות שרוצים להשתמש בהן. אי אפשר להשתמש בהצהרה כדי לאחזר את כל שמות העמודות למטרה הזו. לדוגמה:
ALTER TABLE TABLE_NAME ADD PRIMARY KEY (COLUMN_NAME_1, COLUMN_NAME_2, COLUMN_NAME_3, ...);
מחליפים את מה שכתוב בשדות הבאים:
- TABLE_NAME בשם הטבלה שאין לה מפתח ראשי.
- COLUMN_NAME_1, COLUMN_NAME_2 וכו' עם שמות העמודות שרוצים להשתמש בהן כדי ליצור את המפתח הראשי.
יצירת אילוץ ייחודי באמצעות פסאודו-עמודה
ROWIDבמסדי נתונים של Oracle נעשה שימוש ב
ROWIDפסאודו-עמודה כדי לאחסן את המיקום של כל שורה בטבלה. כדי להעביר טבלאות של Oracle שלא כוללות מפתחות ראשיים, אפשר להוסיף עמודהROWIDבמסד הנתונים של PostgreSQL ביעד. Database Migration Service (שירות העברת מסד נתונים) מאכלס את העמודה עם הערכים המספריים התואמים מפסאודו-העמודהROWIDשל Oracle במקור.כדי להוסיף את העמודה ולהגדיר אותה כמפתח הראשי, מריצים את הפקודה הבאה:
ALTER TABLE TABLE_NAME ADD COLUMN rowid numeric(33,0) NOT NULL; CREATE SEQUENCE TABLE_NAME_rowid_seq INCREMENT BY -1 START WITH -1 OWNED BY TABLE_NAME.rowid; ALTER TABLE TABLE_NAME ALTER COLUMN rowid SET DEFAULT nextval('TABLE_NAME_rowid_seq'); ALTER TABLE TABLE_NAME ADD CONSTRAINT CONSTRAINT_DISPLAY_NAME PRIMARY KEY (rowid);
מחליפים את מה שכתוב בשדות הבאים:
- TABLE_NAME בשם הטבלה שרוצים להוסיף לה את העמודה.
- CONSTRAINT_DISPLAY_NAME במזהה של האילוץ
PRIMARY KEY.