בדף הזה מוסבר איך להעביר טבלאות Oracle שאין להן מפתחות ראשיים.
במאמר יצירה אוטומטית של מפתחות ראשיים מוסבר איך Database Migration Service מטפל בטבלאות מקור שחסרים בהן מפתחות ראשיים.
בקטע הוספה ידנית של מפתחות ראשיים חסרים מוצגות שאילתות לדוגמה שבהן אפשר להשתמש כדי להוסיף מפתחות ראשיים חסרים בסכימה שהומרה.
סקירה כללית על יצירה אוטומטית של מפתחות ראשיים
טבלאות בלי מפתחות ראשיים לא מבטיחות רפליקציה עקבית. Database Migration Service מעביר רק טבלאות שיש להן מפתחות ראשיים. אם מסד הנתונים של המקור כולל טבלאות שאין בהן מפתחות ראשיים, Database Migration Service יכול לטפל בהן בדרכים הבאות:
- כש
ממירים את קוד המקור והסכימה, שירות Database Migration Service יכול ליצור באופן אוטומטי את המפתחות הראשיים החסרים על ידי הוספת עמודות
ROWIDבטבלאות היעד. כדי שהתהליך האוטומטי הזה יפעל, טבלאות המקור צריכות:- אין להם עדיין מפתחות ראשיים.
- אל תגדירו אילוץ
UNIQUEבלי עמודות שניתנות לאיפוס. - אל תשתמשו באינדקס
UNIQUEבלי עמודות שניתנות לאיפוס.
- בסביבות עבודה מדור קודם להמרת מסדי נתונים, 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.