מאת אוקורה א. אדט
Go הוא שפת תכנות מהירה עם תחביר יחסית פשוט. בזמן לימוד Go, חשוב ללמוד כיצד לבנות APIs וכיצד להשתמש בהם לתקשורת עם מסדי נתונים. בתהליך הלמידה, החלטתי לקחת על עצמי פרויקט שעזר לי בכך: API פשוט למעקב אחרי מלאי.
בזמן עבודה עם מסד נתונים SQL כמו Postgres, למדתי שחשוב לבצע שינויים במסד הנתונים בזמן הנכון. אז אם יש לך סכימה שאולי תשנה בעתיד, הדרך הטובה ביותר לעשות זאת היא עם מיגרציות מסד נתונים. זה מבטיח שהשינויים במסד הנתונים יבוצעו בצורה מדויקת מבלי להשפיע על הנתונים הקיימים.
במאמר זה, תלמדו על מיגרציות מסד נתונים באמצעות Docker ו-Postgres.
תוכן העניינים
- מהי מיגרציית מסד נתונים?
- כיצד להתחיל ולהפעיל קונטיינר Docker
- כיצד ליצור ולהפעיל סכימה באמצעות TablePlus
- כיצד להתקין golang-migrate
- כיצד ליצור מיגרציה חדשה
- כיצד ליצור ולמחוק את מסד הנתונים בתוך ומחוץ לקונטיינר Docker Postgres
- איך להציג את הבסיס המידעי בTablePlus
- איך להריץ את המעברות המידעיות
- הסיכוי
מה היא מיגרנציה בסיס המידע?
מה היא מיגרנציה בסיס המידע ומדוע צריך להשתמש בה? ובכן, כפי מפתח רקע, כשאתה עובד על פרוייקט שדרוש ממך לאחסן מידע בבסיס המידע, תצטרך לפתח סכם למידע שלך.
מיגרנציות מספקות לך את הניהול על מבנה המידע בתוך הבסיס המידע ובמקרה זה, בסיס מידע יחסי. המיגרנציות עוזרות לך לשנות את הסכמות ממצב הקיים למצב מסויים/רצון. זה עשוי להיות מורכב מהוספת טאבלות ועמודים, סירור אבנים או שינוי סוגים ודיברים.
אחד החשיבויות של המיגרנציה בסיס המידע היא להפעיל שינויים בבסיס המידע באופן משנהיב וללא דאגה לאבדן המידע.
מוכרח להשתמש במיגרנציות אם אתה לא יודע את הסכם המידעי הסופי שלך. במונחים האלה, אתה יכול ליישם שינויים בהתמדה.
איך להתחיל ולהריץ תא דוקר חדש
פתח את המחשב שלך ויציר תיקייה חדשה mkdir tracking-inventory-app
.
אחר כך, שלוקח תמונה של אחד האימגרים מDocker Hub. השתמשתי בתג postgres:14-alpine
. אתה יכול להשתמש בתג מהם שתרצה.
במחשב שלך, מ
$ docker pull postgres:14-alpine
אחרי ההתקנה, התחל את הקונטייר בשימוש בפקודה docker run
:
$ docker run --name postgres14 -e POSTGRES_USER=root -e POSTGRES_PASSWORD=passwordd -p 5432:5432 -d postgres:14-alpine
הדגל --name
מתייחס לשם של הקונטייר. הדגל -e
מתייחס למשתנים הסביבה. הדגל -p
אומר פרסום. עליך להריץ את הקונטייר שלך על פתח מסויים. הדגל -d
אומר שאתה רוצה להריץ אותו במצב נפרד.
אחרי שהדבקת על הקלדה, פתח את הדוקר דסקTOP אם יש לך אותו מותקן. אם לא, אתה יכול להוריד אותו מהאתר הדוקר.
בדוקר הדסקTOP שלך, תראה שהקונטייר נהיה בהתחלה:
ניתן ליצור קישור עם הבסיס המידע בעזרת TablePlus:
בדיקת הקישור. אם זה אומר OK, אז חבר. אם אתה על מחשב ומצא שם שגיאה האמון, תעבור אל הכפתור ההתחלה שלך ותלחץ על Run
. בתוך הדלתון הזה, תקיע services.msc
ותלחץ Enter. תחפש את postgres ותלחץ על עצמת השירות. אחר כך תנסה לחבר שוב.
איך ליצור ולהריץ סכם בעזרת TablePlus
יצרתי סכם מודעת/מודל מוקדם עבור הפרוייקט tracking-inventory בעזרת db diagram. הסכם הזה הוא tracking-inventory יכול לאפשר לך להוסיף חפץ, מספר סידורים וערך. אז הסכם יתבצע שלם item
, serial_number
, id
ושדות created_at
.
CREATE TABLE "inventory" (
"id" uuid PRIMARY KEY,
"item" varchar NOT NULL,
"serial_number" varchar NOT NULL,
"user" uuid NOT NULL,
"created_at" timestamptz NOT NULL DEFAULT 'now()'
);
CREATE TABLE "user" (
"id" uuid PRIMARY KEY,
"name" varchar NOT NULL,
"email" varchar UNIQUE NOT NULL,
"password" varchar NOT NULL,
"created_at" timestamptz NOT NULL DEFAULT 'now()'
);
CREATE INDEX ON "inventory" ("item");
ALTER TABLE "inventory" ADD FOREIGN KEY ("user") REFERENCES "user" ("id");
זה איך שזה נראה לי. תוכל לפתוח את TablePlus שלך ולהוסיף את הקוד PostgreSQL שנוצר ולהריץ אותו.
כיצד להתקין את golang-migrate
השלב הבא הוא להתקין את golang-migrate על המערכת שלך. אני משתמש בלינוקס על ווינדוס למדריך זה.
כדי להתקין אותו, כנס ל-תיעוד הזה.
אני משתמש בלינוקס, אז אני אשתמש ב-curl
:
$ curl -L https://github.com/golang-migrate/migrate/releases/download/v4.12.2/migrate.linux-amd64.tar.gz | tar xvz
לאחר שהתקנת מוצלחת, בטרמינל שלך, הפעל את הפקודה migrate -help
כדי לראות את הפקודות השונות שלו.
כיצד ליצור העברה חדשה
לאחר התקנת golang-migrate, תוכל ליצור סקריפט העברה חדש.
למעשה, בטרמינל שלך ובתוך תיקיית ה- tracking-app, פתח את VS code עם הפקודה code
.
כשזה נעשה, צור תיקייה חדשה בשם db ועוד תיקייה בתוך תיקיית db בשם migrations.
אז בטרמינל שלך, הרץ את הפקודה הבאה:
$ migrate create -ext sql -dir db/migration -seq tracking_inventory_schema
הדגל -ext מתייחס לסיומת שברצונך ליצור את ההעברה עם. במקרה זה, זהו sql. הדגל -dir מתייחס לתיקייה שבה ברצונך ליצור את הקבצים. הדגל -seq מתייחס למספר הסידורי לקבצי ההעברה.
בתוך VS code שלך, צריך להיות שני קבצים: אחד עבור up ואחד עבור down. הראשון משמש לביצוע שינויים קדימה בתיקייה בעוד האחרון משמש להיפוך השינויים.
בקובץ up, עליך להדביק את הסכימה שלך לקובץ.
הסכימה שלי נראית כך:
CREATE TABLE "inventory" (
"id" uuid PRIMARY KEY,
"item" varchar NOT NULL,
"serial_number" varchar NOT NULL,
"user" uuid NOT NULL,
"created_at" timestamptz NOT NULL DEFAULT 'now()'
);
CREATE TABLE "user" (
"id" uuid PRIMARY KEY,
"name" varchar NOT NULL,
"email" varchar UNIQUE NOT NULL,
"password" varchar NOT NULL,
"created_at" timestamptz NOT NULL DEFAULT 'now()'
);
CREATE INDEX ON "inventory" ("item");
ALTER TABLE "inventory" ADD FOREIGN KEY ("user") REFERENCES "user" ("id");
שלך עשויה להיראות שונה בהתאם לפרויקט שאתה בונה.
עבור הקובץ down
, פשוט הדבק את זה:
DROP TABLE IF EXISTS inventory;
DROP TABLE IF EXISTS user;
טבלת המלאי צריכה להיות מוחקת ראשונה מאחר שהיא מתייחסת לטבלת המשתמשים.
כיצד ליצור ולמחוק את מסד הנתונים בתוך ומחוץ לתוך תכולת Docker Postgres
בדוק האם ה-container שלך רץ באמצעות הפקודה הבאה:
$ docker ps
אם לא, השתמש בפקודה docker start ${container name}
כדי להתחיל אותו.
השלב הבא הוא לגשת ל-shell של postgres באמצעות הפקודה הבאה מכיוון שאני ב-Linux:
$ docker exec -it postgres14 bin/bash
הדגל -it
מציין shell/terminal אינטראקטיבי. בתוך ה-shell הזה, ניתן להריץ את הפקודה createdb
:
/# createdb --username=root --owner=root tracking_inventory
כשנוצר, ניתן להריץ את הפקודה psql
כדי להתקשר עם מסד הנתונים:
/# psql tracking-inventory
psql (14.12)
Type "help" for help.
tracking_inventory=#
ניתן גם למחוק את מסד הנתונים בעזרת הפקודה dropdb
.
כדי לצאת מה-shell, השתמש בפקודת exit
.
כדי ליצור את מסד הנתונים מחוץ ל-container של postgres, הדבק את הפקודה הבאה:
$ docker exec -it postgres14 createdb --username=root --owner=root tracking_inventory
כיצד לצפות במסד הנתונים ב-TablePlus
כדי לצפות במסד הנתונים שיצרת, חבר באמצעות החיבור הקודם שהצגנו קודם. זה ינחה אותך למסד הנתונים הראשי ואז לחץ על סמל ה-db בחלק העליון.
המסד הנתונים שנוצר יופיע, תלחץ פשוט על open
כדי לפתוח אותו
כיצד להפעיל את ההעברות
כדי להפעיל את ההעברות, הרץ את הפקודה הבאה ב-terminal שלך:
$ migrate -path db/migration -database "postgresql://root:passwordd@localhost:5432/tracking_inventory?sslmode=disable" -verbose up
הדגל -path
מספק את המסלול שבו מוצאים את הקבצים המעברים. האפשרות -database
מספקת את הכתובת לבסיס הנתונים.
בתוך הכתובת, הנהג הוא postgresql
. שם המשתמש והסיסמה הם root
וpasswordd
בהדרגה. חשוב גם להוסיף את האפשרות sslmode=disable
בגלל שPostgres לא מאפשרת SSL באופן בר-מקור.
עכשיו בואו נרצה את המעברים:
$ migrate -path db/migration -database "postgresql://root:passwordd@localhost:5432/tracking_inventory?sslmode=disable" -verbose up
calhost:5432/tracking_inventory?sslmode=disable" -verbose up
2024/06/25 00:13:25 Start buffering 1/u tracking_inventory_schema
2024/06/25 00:13:25 Read and execute 1/u tracking_inventory_schema
2024/06/25 00:13:26 Finished 1/u tracking_inventory_schema (read 43.186044ms, ran 255.501635ms)
2024/06/25 00:13:26 Finished after 312.928488ms
2024/06/25 00:13:26 Closing source and database
המעבר התבצע בהצלחה!
רענן את הבסיס הנתונים וראה את הטבלות החדשות:
##סיכום
במהלך המדריך הזה, למדת איך לשירבוט ולרצף בעצם מעברים בבסיס הנתונים בשימוש בDocker וPostgres. אני מקווה שלמדת הרבה מהמאמר הזה.
Source:
https://www.freecodecamp.org/news/how-to-create-database-migrations-in-go/