ייצוא וייבוא באמצעות pg_dump,‏ pg_dumpall ו-pg_restore

בדף הזה מוסבר איך לייצא ולייבא נתונים למכונות Cloud SQL באמצעות pg_dump,‏ pg_dumpall ו-pg_restore.

לפני שמתחילים

הייצוא משתמש במשאבי מסד הנתונים, אבל הוא לא מפריע לפעולות הרגילות של מסד הנתונים, אלא אם המופע לא הוקצה מספיק.

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

אחרי שמסיימים פעולת ייבוא, צריך לאמת את התוצאות.

מידע נוסף על כלי השירות pg_dump, pg_dumpall וpg_restore

ייצוא נתונים מ-Cloud SQL ל-PostgreSQL

אפשר להשתמש ב-Cloud SQL כדי לבצע ייצוא מ Google Cloud המסוף, מ-ה-CLI של gcloud או מה-API.

  • כדי לייצא מסד נתונים יחיד של PostgreSQL, משתמשים בכלי pg_dump.
  • כדי לייצא את כל מסדי הנתונים של PostgreSQL באשכול, משתמשים בכלי pg_dumpall.

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

ייצוא נתונים משרת PostgreSQL מקומי באמצעות pg_dump

כדי לייצא מסד נתונים שלא מנוהל על ידי Cloud SQL, לצורך ייבוא מאוחר יותר ל-Cloud SQL, משתמשים בכלי pg_dump עם הדגלים הבאים:

  • --no-owner

    אסור לכלול בקובץ ה-dump פקודות לשינוי הבעלות.

  • --format

    מותר להשתמש בפורמטים custom ו-directory אם קובץ ה-dump מיועד לשימוש עם pg_restore.

    בפורמט plain-text, מייצאים ל-SQL dump file במקום זאת. הפורמט הזה לא תואם ל-pg_restore, ולכן צריך לייבא אותו באמצעות פקודת הייבוא של מסוף Google Cloud או לקוח psql.

  • --no-acl

    חובה להשתמש בדגל הזה אם הפלט של ה-dump אמור לכלול הצהרות לגבי הענקת או ביטול חברות בתפקיד SUPERUSER.

  • --clean

    הדגל האופציונלי הזה מאפשר לכם לכלול את הצהרת ה-SQL‏ DROP <object> שנדרשת להסרת (ניקוי) אובייקטים של מסד נתונים לפני הייבוא שלהם.

  • --if-exists

    הדגל האופציונלי הזה מאפשר לכם לכלול את הצהרת ה-SQL‏ IF EXISTS עם כל הצהרה DROP שנוצרת על ידי הדגל clean.

בנוסף, צריך להסיר את כל הפריטים הבאים:

  • הצהרות שקשורות לתוסף, אם Cloud SQL לא תומך בתוסף הזה. רשימת התוספים הנתמכים מופיעה במאמר PostgreSQL Extensions.
  • CREATE EXTENSION או DROP EXTENSION הצהרות שמפנות ל-plpgsql. התוסף הזה מותקן מראש במכונות של Cloud SQL Postgres.
  • COMMENT ON EXTENSION דוחות.

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

ייצוא נתונים מ-Cloud SQL ל-PostgreSQL בפורמט custom

כדי להשתמש בפורמט בהתאמה אישית, מריצים את הפקודה pg_dump משורת הפקודה:

pg_dump \
-U USERNAME \
--format=custom \
--no-owner \
--no-acl \
DATABASE_NAME > DATABASE_NAME.dmp

ייצוא נתונים מכמה קבצים במקביל מ-Cloud SQL ל-PostgreSQL

אפשר להשתמש בפורמט הפלט directory רק כדי לייצא נתונים מכמה קבצים במקביל.

כדי לייצא במקביל, משתמשים בדגל -j NUM_CORES. ‫NUM_CORES הוא מספר ליבות המעבד במופע המקור.

ייצוא של כל מסדי הנתונים

pg_dumpall הוא כלי שמאפשר לכם לחלץ את כל מסדי הנתונים של PostgreSQL באשכול לקובץ סקריפט יחיד. בקובץ הזה יש פקודות SQL שאפשר להשתמש בהן כדי לשחזר את מסדי הנתונים.

כדי לייצא את כל מסדי הנתונים של PostgreSQL במכונה של Cloud SQL, משתמשים בכלי pg_dumpall עם הדגלים הבאים שהם חובה:

  • exclude-database=cloudsqladmin
  • exclude-database=template*

לכלי pg_dumpall אין גישה למסדי הנתונים cloudsqladmin או template.

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

pg_dumpall \
-h HOST_NAME -l DATABASE_NAME --exclude-database=cloudsqladmin \
--exclude-database=template* > pg_dumpall.sql

כדי לראות את הסיסמאות של התפקידים כשמבצעים dump של תפקידים באמצעות pg_dumpall, מגדירים את הדגל cloudsql.pg_authid_select_role לשם של תפקיד ב-PostgreSQL. אם התפקיד קיים, יש לו הרשאת קריאה בלבד (SELECT) לטבלה pg_authid. הטבלה הזו מכילה סיסמאות של תפקידים.

ייבוא

משתמשים בכלי השירות pg_restore כדי לייבא ארכיון למסד נתונים של Cloud SQL. הפונקציה pg_restore פועלת רק עם ארכיונים שנוצרו על ידי pg_dump בפורמטים custom או directory. מידע נוסף על pg_restore

ייבוא מתוך קובץ dump שנוצר בפורמט custom אל Cloud SQL ל-PostgreSQL

אם קובץ ה-dump נוצר בפורמט מותאם אישית, מריצים את הפקודה הבאה:

pg_restore \
--list DATABASE_NAME.dmp | sed -E 's/(.* EXTENSION )/; \1/g' >  DATABASE_NAME.toc

בשלב העיבוד שאחרי, sed מוסיף הערות לכל הצהרות התוסף בקובץ ה-SQL המוכן לשימוש.

כשמייבאים באמצעות pg_restore, מציינים את תוכן העניינים שעבר עיבוד באמצעות ארגומנט שורת הפקודה ‎ "--use-list=DATABASE_NAME.toc".

ייבוא נתונים מכמה קבצים במקביל אל Cloud SQL ל-PostgreSQL

אפשר לייבא נתונים מכמה קבצים במקביל רק לארכיונים שנוצרו באמצעות פורמטי הפלט directory ו-custom.

כדי לייבא במקביל, משתמשים בדגל -j NUM_CORES. ‫NUM_CORES הוא מספר ליבות המעבד במופע היעד.

ביצועי ייבוא ב-Cloud SQL ל-PostgreSQL

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