שיטות מומלצות לייבוא וייצוא של נתונים

כשמייבאים ומייצאים נתונים ל-AlloyDB ל-PostgreSQL, כדאי לפעול לפי השיטות המומלצות הבאות:

  • אל תשתמשו בקטגוריות של Cloud Storage עם התכונה מגיש הבקשה משלם לייבוא או לייצוא.
  • כשיוצרים קובץ SQL dump, חשוב להשתמש בדגלים הנכונים.
  • דחיסת נתונים כדי להפחית את העלויות.
  • כדי לצמצם את משך הזמן של תהליכי ייבוא וייצוא, כדאי לעבד את הנתונים באצוות.
  • אחרי הייבוא, מאמתים את מסד הנתונים שיובא.

לא להשתמש בקטגוריות של Cloud Storage שמוגדרות בהן בקשות בתשלום

אי אפשר להשתמש בקטגוריה של Cloud Storage שבה מופעלת התכונה 'מגיש הבקשה משלם' לצורך ייבוא אל AlloyDB או ייצוא ממנו. ב-AlloyDB נעשה שימוש בחשבון שירות בניהול Google, סוכן שירות, כדי לבצע ייבוא וייצוא. בדרך כלל לסוכן הזה אין את ההקשר או את ההגדרה כדי לחייב את הפרויקט של מגיש הבקשה על גישה לנתונים, ולכן פעולות שכוללות בקשות לגישה ל-buckets עם חיוב מגיש הבקשה נכשלות.

שימוש בדגלים הנכונים כשיוצרים קובץ SQL מוכן לשימוש

אם לא משתמשים בדגלים ובאפשרויות הנכונים כשמייצאים נתונים לקובץ SQL מוכן לשימוש, יכול להיות שהייבוא ייכשל. מידע על ייצוא נתונים לצורך ייבוא ל-AlloyDB זמין במאמרים ייצוא קובץ DMP וייצוא קובץ SQL.

דחיסת נתונים כדי להפחית את העלויות

‫AlloyDB תומך בייבוא ובייצוא של קובצי .gz דחוסים מ-Cloud Storage. דחיסה יכולה לחסוך נפח אחסון משמעותי ב-Cloud Storage ולהפחית את עלויות האחסון, במיוחד כשמייצאים כמויות גדולות של נתונים. כשמייצאים קובץ CSV או SQL dump באמצעות AlloyDB API, צריך להשתמש בתוסף .gz ב-URI של היעד כדי לדחוס את הנתונים. כשמייבאים קובץ עם סיומת .gz, הקובץ נפרס אוטומטית.

צמצום תהליכי ייבוא וייצוא ארוכים

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

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

אימות מסד הנתונים שיובא

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

אוטומציה של פעולות ייצוא

למרות ש-AlloyDB לא מספק שיטה מובנית לייצוא אוטומטי, אפשר ליצור כלי אוטומציה באמצעות רכיבים אחרים שלGoogle Cloud כמו Cloud Scheduler,‏ Pub/Sub ופונקציות Cloud Run.

פתרון בעיות

בקטע הזה מפורטות הצעות לפתרון בעיות שאתם עלולים להיתקל בהן בפעולות ייבוא וייצוא.

פעולות ייבוא

שגיאה תיאור תיקון מומלץ
ERROR: permission denied for schema public ב-PostgreSQL 15 ואילך, יכול להיות שהייבוא של נתונים ייכשל בגלל הרשאות סכימה אם יוצרים את מסד הנתונים של היעד מ-template0.

כדי לפתור את הבעיה, משתמשים בפקודה הבאה כדי להעניק הרשאות בסכימה public למשתמש שמייבא את הנתונים:

        GRANT ALL ON SCHEMA public TO my_import_user;
        
פעולת הייבוא נמשכת יותר מדי זמן. יותר מדי חיבורים פעילים עלולים להפריע לפעולות ייבוא.

נסו:

  • סוגרים חיבורים שלא בשימוש.
  • כדי לוודא שיש מספיק משאבים זמינים, כדאי לבדוק את השימוש במעבד (CPU) ובזיכרון של המופע.
  • כדי לוודא שמשימת הייבוא מקבלת את מרב המשאבים, צריך להפעיל מחדש את המכונה לפני התחלת הפעולה. הפעולה הזו סוגרת את כל החיבורים ומסיימת משימות שעשויות לצרוך משאבים.
פעולת ייבוא נכשלת כי משתמש אחד או יותר שמצוינים בקובץ ה-dump לא קיימים. לפני שמייבאים קובץ dump, כל המשתמשים במסד הנתונים שיש בבעלותם אובייקטים או שקיבלו הרשאות לאובייקטים במסד הנתונים שהושלך חייבים להיות קיימים במסד הנתונים של היעד. אם הם לא קיימים, פעולת הייבוא לא מצליחה ליצור מחדש את האובייקטים עם הבעלות או ההרשאות המקוריות. לפני הייבוא, יוצרים את משתמשי מסד הנתונים הנדרשים.
GRANT stderr: ERROR: must be member of role ROLE_NAME השגיאה הזו יכולה להתרחש אם מייבאים קובץ SQL dump שמכיל אובייקטים בבעלות ROLE_NAME, או הרשאות שניתנו ל-ROLE_NAME, אבל משתמש מסד הנתונים שמבצע את הייבוא לא חבר ב-ROLE_NAME. כדי לפתור את הבעיה, צריך לוודא שהתפקיד ROLE_NAME קיים במסד הנתונים של היעד, ולהעניק למשתמש שמבצע את הייבוא חברות ב-ROLE_NAME לפני הפעלת הייבוא.

פעולות ייצוא

שגיאה תיאור תיקון מומלץ
HTTP Error 403: The service account does not have the required permissions for the bucket. לחשבון השירות של AlloyDB אין את ההרשאות הנדרשות לקטגוריית היעד. צריך לוודא שקטגוריית Cloud Storage של היעד קיימת ושלחשבון השירות של AlloyDB הוקצו התפקידים roles/storage.objectAdmin או roles/storage.objectCreator. התפקידים האלה מאפשרים לו לכתוב לקטגוריה. מידע נוסף זמין במאמר בנושא תפקידים של ניהול זהויות והרשאות גישה (IAM) ב-Cloud Storage.
ייצוא ה-CSV פעל, אבל ייצוא ה-SQL נכשל. הייצוא של פורמטים CSV ו-SQL מתבצע באופן שונה. בפורמט SQL מיוצאים סכימת מסד הנתונים והנתונים, והייצוא בדרך כלל נמשך יותר זמן. בפורמט CSV מיוצאים רק הנתונים שמתקבלים משאילתת SELECT שאתם מספקים. אם ייצוא SQL נכשל או איטי מדי, כדאי לייצא טבלאות נפרדות באמצעות CSV.
הייצוא נמשך יותר מדי זמן. אם הייצוא נמשך יותר מדי זמן במופע הראשי, יכול להיות שהייצוא גדול מדי. כדאי לייצא את הנתונים בקבוצות קטנות יותר. לדוגמה, אפשר לייצא טבלאות בנפרד במקום לייצא מסד נתונים שלם בפעולה אחת. אפשר גם להשתמש בכלי pg_dump כדי לבצע ייצוא ידני מלקוח שמחובר למופע של מאגר לקריאה.
שגיאת Create Extension ביומן pg_restore או שהייבוא נכשל. קובץ ה-dump מכיל הפניות לתוסף PostgreSQL שלא נתמך ב-AlloyDB, או שלא מותקן באשכול. כדי להסיר את ההפניות, עורכים את קובץ ה-dump או מתקינים את התוסף באשכול אם הוא נתמך ב-AlloyDB.
שגיאה בשימוש ב-pg_dumpall. יכול להיות שיהיה צורך בהרשאות שלא זמינות ב-AlloyDB כדי להשתמש בכלי pg_dumpall עם דגלים כמו --globals-only.

כדי לייצא אובייקטים גלובליים כמו משתמשים ותפקידים ללא סיסמאות, משתמשים בפקודה הבאה כדי לכלול את הדגל --no-role-passwords:

        pg_dumpall --globals-only --no-role-passwords
        
הזמן הקצוב לתפוגה של פעולת הייצוא מסתיים או שמופיעה השגיאה Connection reset by peer. אם נתוני החיוב ב-Cloud לא מתקבלים ב-Cloud Storage בתוך פרק זמן מסוים, יכול להיות שהחיבור יתאפס. זה יכול לקרות אם השאילתות הראשוניות במסד הנתונים שנדרשות לייצוא נמשכות יותר מדי זמן. אם זה קורה, נסו לבצע ייצוא ידני באמצעות הכלי pg_dump מלקוח שמחובר למופע של מאגר לקריאה.

בעיות נפוצות

שגיאה תיאור תיקון מומלץ
HTTP Error 409: Operation failed because another operation was already in progress. המערכת מאפשרת לבצע רק פעולת ייבוא או ייצוא אחת שמבוססת על API בכל פעם. כדאי לנסות לשלוח את הבקשה אחרי שהפעולה הנוכחית תסתיים.

המאמרים הבאים