בדף הזה מוסבר איך לנהל שינויים בסכימת מסד נתונים של 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.