בדף הזה מוסבר איך לנהל שינויים בסכימת מסד נתונים של Spanner באמצעות Liquibase עבור מסדי נתונים עם ניב GoogleSQL ומסדי נתונים עם ניב PostgreSQL.
Liquibase היא ספרייה בקוד פתוח שאינה תלויה במסד נתונים, ומאפשרת לעקוב אחרי שינויים בסכימת מסד נתונים, לנהל אותם ולהחיל אותם. הוא תומך ב-SQL וגם בפורמטים הצהרתיים כמו XML, YAML ו-JSON.
Liquibase יכול לטרגט מסדי נתונים של Spanner. הוא תומך בכל התכונות של Spanner, עם כמה מגבלות.
- מידע על מגבלות כלליות מופיע במאמר בנושא מגבלות.
- מידע נוסף על מסדי נתונים בניב PostgreSQL, כמו דרישות Liquibase, סוגי שינויים נתמכים ומגבלות, זמין במאמר PGAdapter ו-Liquibase.
התקנת Liquibase
כדי להשתמש ב-Liquibase עם מסדי נתונים בניב GoogleSQL, צריך להתקין את התוסף Spanner Liquibase. במסדי נתונים של ניב PostgreSQL, Liquibase יכול להשתמש בתמיכה המובנית שלו ב-PostgreSQL בשילוב עם PGAdapter.
GoogleSQL
פועלים לפי ההוראות במסמכי Liquibase כדי להתקין ולהגדיר את Liquibase, וכדי לצלם תמונת מצב של מסד הנתונים.
עוברים לדף הגרסאות של Spanner Liquibase Extension ב-GitHub ובוחרים את הגרסה האחרונה.
בוחרים ומורידים את קובץ ה-JAR עם השם
liquibase-spanner-x.y.z-all.jar, כאשר x.y.z מייצג את מספר הגרסה של התוסף. לדוגמה,liquibase-spanner-4.17.0-all.jar.ממקמים את קובץ ה-JAR שהורדתם בספריית lib של Liquibase. קובץ ה-JAR כולל את התוסף, את Spanner SDK ואת מנהל ההתקן של Spanner JDBC.
בקובץ התצורה liquibase.properties, מגדירים את המאפיין url באופן הבא.
jdbc:cloudspanner:/projects/PROJECT/instances/INSTANCE/databases/DATABASE
קובץ התצורה liquibase.properties יכול להכיל רק את המאפיין הזה. מאפיינים אחרים הם אופציונליים.
PostgreSQL
מוודאים ש-PGAdapter מופעל ופועל במחשב שבו מתקינים את Liquibase. מידע נוסף זמין במאמר בנושא הפעלת PGAdapter.
פועלים לפי ההוראות במסמכי Liquibase כדי להתקין ולהגדיר את Liquibase, וכדי לצלם תמונת מצב של מסד הנתונים.
בקובץ התצורה liquibase.properties, מגדירים את המאפיין url באופן הבא.
jdbc:postgresql://localhost:5432/DATABASE_NAME?options=-c%20spanner.ddl_transaction_mode=AutocommitExplicitTransaction
קובץ התצורה liquibase.properties יכול להכיל רק את המאפיין הזה. מאפיינים אחרים הם אופציונליים.
url המחרוזת חייבת לכלול
options=-c%20spanner.ddl_transaction_mode=AutocommitExplicitTransaction
כי Spanner לא תומך בעסקאות DDL, והמחרוזת הזו
מבטיחה שעסקאות DDL יומרו לחבילות DDL. מידע נוסף זמין במאמר בנושא אפשרויות DDL ל-PGAdapter.
עיון בדוגמאות של Liquibase
GoogleSQL
קובץ יומן השינויים לדוגמה changelog.yaml שכלול בתוסף GoogleSQL Liquibase מדגים הרבה מהתכונות של Liquibase ומראה איך להשתמש בהן עם Spanner.
PostgreSQL
בקובץ יומן השינויים לדוגמה dbchangelog.xml שזמין במאגר GitHub של PGAdapter ו-Liquibase מודגמות רבות מהתכונות של Liquibase ומוסבר איך להשתמש בהן עם Spanner.
מדריך למתחילים בנושא Liquibase
במדריך למתחילים הזה מוסבר איך להשתמש ב-Liquibase כדי להוסיף טבלה Singers למסד נתונים.
לפני שמתחילים
חשוב לוודא שהשלמתם את השלבים הקודמים להתקנה של Liquibase.
יוצרים מכונת Spanner.
יוצרים מסד נתונים בניב GoogleSQL או בניב PostgreSQL.
במסדי נתונים של ניב PostgreSQL בלבד, מוודאים ש-PGAdapter מופעל ופועל באותו מחשב שבו מותקן Liquibase. מידע נוסף זמין במאמר בנושא הפעלת PGAdapter.
במסדי נתונים של ניב PostgreSQL בלבד, משתמשים בסקריפט create_database_change_log.sql כדי ליצור את טבלאות המטא-נתונים
databasechangeloglockו-databasechangelog. צריך ליצור את הטבלאות האלה כדי להחליף את הטבלאות ש-Liquibase יוצר באופן אוטומטי במסד הנתונים. הסיבה לכך היא לוודא שנעשה שימוש בסוגי הנתונים הנכונים של PostgreSQL עבור Spanner בטבלאות האלה.אפשר להריץ את הסקריפט באמצעות הפקודה הבאה:
psql -h localhost -d DATABASE_NAME -f create_database_change_log.sql
כדי לתת לתוסף Spanner Liquibase גישה זמנית ל-API באמצעות פרטי הכניסה שלכם ב-Spanner, מריצים את הפקודה
gcloudהבאה:gcloud auth application-default login
יצירת קובץ changelog.yaml
מזינים את קוד ה-YAML הבא בעורך המועדף.
databaseChangeLog: - preConditions: onFail: HALT onError: HALT - changeSet: id: create-singers-table author: spanner-examples changes: - createTable: tableName: Singers columns: - column: name: SingerId type: BIGINT constraints: primaryKey: true primaryKeyName: pk_Singers - column: name: Name type: VARCHAR(255)קובץ ה-YAML הזה מגדיר טבלה בשם
Singersעם מפתח ראשיSingerIdועמודה בשםNameלאחסון שם הזמר.במסדי נתונים של ניב PostgreSQL, מומלץ להשתמש באותיות קטנות בלבד בשמות של טבלאות ועמודות. מידע נוסף זמין במאמר בנושא הבחנה בין אותיות רישיות לרגילות ב-PostgreSQL.
שימו לב שקבוצת השינויים
createTableחייבת לכלול אילוץ של מפתח ראשי, ושם האילוץ של המפתח הראשי חייב להיות pk_table_name.שומרים את השינויים כ-
changelog.yaml.
הפעלת Liquibase
מריצים את הפקודה הבאה כדי להחיל את השינויים ב-changelog.yaml:
liquibase --changeLogFile changelog.yaml update
Liquibase משתמש בכתובת ה-URL שהגדרתם בקובץ liquibase.properties. אפשר לשנות את הערך בקובץ על ידי הוספת הארגומנט הבא לפקודה הקודמת:
--url URL
בדיקת השינויים
העדכונים בשלב הקודם גרמו להוספת הטבלה Singer למסד הנתונים. בנוסף, הטבלאות DATABASECHANGELOG ו-DATABASECHANGELOGLOCK נוספו (מסד נתונים עם ניב GoogleSQL) או עודכנו (מסד נתונים עם ניב PostgreSQL).
אפשר לוודא שהטבלאות האלה קיימות דרך Google Cloud המסוף
או ה-CLI של gcloud. לדוגמה, הרצת שאילתת ה-SQL SELECT * FROM
INFORMATION_SCHEMA.TABLES מחזירה רשימה של כל הטבלאות במסד הנתונים.
gcloud spanner databases execute-sql DATABASE_NAME --instance=INSTANCE \
--sql='SELECT * FROM INFORMATION_SCHEMA.TABLES'
כדי לראות תיעוד של השינויים שהוחלו, אפשר לשלוח שאילתה לגבי התוכן של DATABASECHANGELOG.
המאמרים הבאים
מידע נוסף זמין במאגר GitHub של Spanner Liquibase Extension.
מידע נוסף על Liquibase זמין במאמר תחילת העבודה עם Liquibase.