گو مائیگریش کا تھریو

1. گو مائیگریش کا جائزہ

گو مائیگریش ایک ٹول ہے جو گو زبان میں تیار دیتابیس مائیگریشن کو منظم کرنے کے لیے ہے۔ یہ کمانڈ لائن انٹرفیس (CLI) کے طور پر استعمال کیا جا سکتا ہے یا گو پروجیکٹس کے لیبریری کے طور پر درآمد کیا جا سکتا ہے۔ گو مائیگریش مختلف ماحولوں سے مائیگریشن فائلوں کو پڑھ سکتا ہے اور انہیں درست ترتیب سے ڈیٹا بیس پر لاگو کر سکتا ہے۔ یہ مختلف ڈیٹا بیس ڈرائیورز اور مائیگریشن سورسز کو سپورٹ کرتا ہے۔

2. ورژنز

گو مائیگریش متعدد ورژنز کو سپورٹ کرتی ہے، جن میں شامل ہیں:

-ماسٹر: تازہ ترین ورژن جو نئی خصوصیات اور بگ فکسز شامل ہے۔

-V4: مضمون ورژن، جو تجارتی ماحولوں کے لیے مناسب ہے۔

  • V3: اس کی حمایت ختم ہوگئی ہے اور اسے استعمال نہیں کرنا چاہیے۔

3. انسٹالیشن

گو مائیگریش کا استعمال کرنے کے لیے، گو پیکیج کی انسٹالیشن کرنی ہوگی۔ انسٹالیشن کے لیے مندرجہ ذیل کمانڈ کا استعمال کریں:

go get -u -d github.com/golang-migrate/migrate/v4
cd $GOPATH/src/github.com/golang-migrate/migrate/v4

3. گو مائیگریش کا استعمال

گو مائیگریش کو CLI کے ذریعے یا گو پروجیکٹ میں لائبریری کے طور پر استعمال کیا جاسکتا ہے۔

3.0. ڈیٹابیس کنیکشن یو آر ایل

CLI یا گو کوڈ کا استعمال کرنے کے لیے، ڈیٹابیس یو آر ایلز کو ڈیٹابیس سے کنیکٹ کرنے کے لئے تشکیل دینا ہوگا۔

یو آر ایل فارمیٹ:

dbdriver://username:password@host:port/dbname?param1=true&param2=false

یہ یو آر ایل ڈیٹابیس سے کنیکٹ ہونے کے لئے استعمال ہوتی ہے اور کنیکشن پیرامیٹرز کو مخصوص کرتی ہے۔ یہاں ہر حصہ کی وضاحت یہ ہے:

  1. dbdriver://: یہ ڈیٹابیس ڈرائیور کے لیے پروٹوکول شناخت کرنے والا ہے جو اسے بتانے کے لیے استعمال ہوتا ہے کہ کون سا ڈیٹابیس ڈرائیور استعمال ہوگا، مثلاً mysql۔

  2. username:password: یہ استعمال ہونے والا یوزر نیم اور پاس ورڈ ہے۔ عموماً یوزر نیم اور پاس ورڈ کو آپس میں کولن (: ) سے جدا کیا جاتا ہے۔

  3. @: یہ نشان، یوزر نیم اور پاس ورڈ کو ہوسٹ نیم اور پورٹ سے الگ کرنے کے لئے استعمال ہوتا ہے۔

  4. host:port: یہ ڈیٹابیس سرور کا ہوسٹ نیم اور پورٹ نمبر ہے۔ ہوسٹ نیم ڈیٹابیس سرور کا آئی پی یا ڈومین نام ہوتا ہے، جبکہ پورٹ نمبر ڈیٹابیس سرور کی سننے کے لئے استعمال ہوتا ہے۔

  5. /dbname: یہ وہ ڈیٹابیس کا نام ہے جس سے کنیکٹ ہونا ہے۔

  6. ?param1=true&param2=false: یہ حصہ اضافی کنیکشن پیرامیٹرز کو مخصوص کرنے کے لئے استعمال ہوتا ہے۔ اس مثال میں، دو پیرامیٹرز ہیں۔

اتنا کنیکشن پیرامیٹرز کو مخصوص کرنے کے لئے ڈیٹابیس ڈرائیور اور ڈیٹابیس سرور کی خصوصیات یا رفتاروں کو تشکیل دینے کے لئے کر رہے ہوتے ہیں۔

پوسٹگریس کنیکشن پیرامیٹرز

postgres://postgres:password@localhost:5432/example?sslmode=disable

SQLite کنیکشن پیرامیٹرز

sqlite3://path/to/database?query

مانگو ڈیٹابیس کنیکشن پیرامیٹرز

mongodb://user:password@host:port/dbname?query

3.1 CLI استعمال

3.1.1 بنیادی استعمال

CLI استعمال کرنے کے لیے، مندرجہ ذیل کمانڈ چلاَئیں:

migrate -source file://path/to/migrations -database postgres://localhost:5432/database up 2

یہ کمانڈ مائیگریشنز کو مخصوص مقام سے دی گئی ڈیٹابیس پر لاگو کرتی ہے۔ نمبر "2" وضاحت کرتا ہے کہ کتنی مائیگریشنز لاگو ہونی ہیں۔

3.1.2 ڈاکر استعمال

گو مائیگریش کو ڈاکر کے ساتھ بھی استعمال کیا جاسکتا ہے۔ مندرجہ ذیل کمانڈ چلاَئیں:

docker run -v {{ migration dir }}:/migrations --network host migrate/migrate -path=/migrations/ -database postgres://localhost:5432/database up 2

اس کمانڈ میں گو مائیگریش کو ایک ڈاکر کنٹینر میں چلایا جاتا ہے اور دی گئی مخصوص مقام سے ڈیٹابیس پر مائیگریشنز لاگو کی جاتی ہیں۔

3.2 آپ کے گو پروجیکٹ میں استعمال کرنا

Go Migrate کو آپ کے گو پروجیکٹ میں استعمال کرنے کے لئے، آپ کو ضروری پیکیجز اور لائبریریز کو امپورٹ کرنا ہوتا ہے۔ نیچے ایک مثال دی گئی ہے:

import (
    "github.com/golang-migrate/migrate/v4"
    _ "github.com/golang-migrate/migrate/v4/database/postgres"
    _ "github.com/golang-migrate/migrate/v4/source/github"
)

func main() {
    m, err := migrate.New(
        "github://mattes:personal-access-token@mattes/migrate_test",
        "postgres://localhost:5432/database?sslmode=enable")
    m.Steps(2)
}

اس کوڈ میں گو ماڈیگریٹ کو مخصوص سورس اور ڈیٹا بیس کے ساتھ شروع کیا جاتا ہے، پھر Steps میتھڈ کا استعمال کرکے 2 مائیگریشنز لگائے جاتے ہیں۔

اگر آپ ایک موجودہ ڈیٹا بیس کلائنٹ استعمال کرنا چاہتے ہیں، تو نیچے دی گئی مثال کا مطلب لیں:

import (
    "database/sql"
    _ "github.com/lib/pq"
    "github.com/golang-migrate/migrate/v4"
    "github.com/golang-migrate/migrate/v4/database/postgres"
    _ "github.com/golang-migrate/migrate/v4/source/file"
)

func main() {
    db, err := sql.Open("postgres", "postgres://localhost:5432/database?sslmode=enable")
    driver, err := postgres.WithInstance(db, &postgres.Config{})
    m, err := migrate.NewWithDatabaseInstance(
        "file:///migrations",
        "postgres", driver)
    m.Up()
}

اس کوڈ میں ضروری پیکیجز کو امپورٹ کرکے ڈیٹا بیس کلائنٹ کو sql پیکیج کے ساتھ شروع کیا جاتا ہے۔ پھر NewWithDatabaseInstance میتھڈ کا استعمال کرکے گو ماڈیگریٹ کی ایک نئی مثال بنائی جاتی ہے، جس میں سورس اور ڈیٹا بیس ڈرائیور کا اندراج ہوتا ہے۔ آخر میں، Up میتھڈ کا استعمال کرکے مائیگریشن لگایا جاتا ہے۔

4. معاون ڈیٹابیس ڈرائیورز

Go Migrate کئی ڈیٹابیس ڈرائیورز کو سپورٹ کرتا ہے، ان میں شامل ہیں:

  • پوسٹگریسل
  • پی جی ایکس ورژن 4
  • پی جی ایکس ورژن 5
  • ریڈ شفٹ
  • کوئل
  • کاساندرا
  • ایسکیولائٹ
  • ایس کیو آئٹ 3
  • ایس کیو آئٹھر
  • ماریا ڈی بی
  • نیو فور جے
  • مانگو ڈی یو بی
  • کریٹ ڈی بی
  • شیل
  • گوگل کلاڈ سپینر
  • کوکریچ ڈی بی
  • یوگابائٹ ڈی بی
  • کلک ہاؤس
  • فائر برڈ
  • ایم ایس ایس کیو ایرور

5. معاون مائیگریشن سورسز

Go Migrate کئی مائیگریشن سورسز کو سپورٹ کرتا ہے، ان میں شامل ہیں:

  • فائل سسٹم: مقامی فائل سسٹم سے مائیگریشنز کو پڑھیں۔
  • io/fs: گو io/fs پیکیج کا استعمال کرکے مائیگریشنز کو پڑھیں۔
  • گو- بنڈیٹا: مضمون بائنری ڈیٹا کا استعمال کرکے مائیگریشنز کو پڑھیں، jteeuwen/go-bindata پیکیج کا استعمال کرکے۔
  • pkger: ایمبیڈڈ بائینری ڈیٹا کا استعمال کرکے مائیگریشنز کو پڑھیں، markbates/pkger پیکیج کا استعمال کرکے۔
  • گیت ہب: ایک دوربین ریموٹ گیٹ ہب ریپوزیٹری سے مائیگریشنز کو پڑھیں۔
  • گیت ہب انٹرپرائز: ایک دوربین ریموٹ گیٹ ہب انٹرپرائز ریپوزیٹری سے مائیگریشنز کو پڑھیں۔
  • بٹ بکٹ: ایک دوربین ریموٹ بٹ بکٹ ریپوزیٹری سے مائیگریشنز کو پڑھیں۔
  • گٹلیب: ایک دوربین ریموٹ گٹلیب ریپوزیٹری سے مائیگریشنز کو پڑھیں۔
  • اے ڈبلیو ایس ای 3: ایمیزون ویب سروسز س3 سے مائیگریشنز کو پڑھیں۔
  • گوگل کلاڈ اسٹوریج: گوگل کلاڈ پلیٹ فارم استوریج سے مائیگریشنز کو پڑھیں۔

آپ کے پروجیکٹ کی ضروریات کے مطابق، آپ مائیگریشن فائلز کو مذکورہ بالا معاون فائل اسٹوریج سورسز میں رکھ سکتے ہیں۔

6. مائیگریشن فائلز

Go Migrate میں مائیگریشن فائلز کا مخصوص نام اور مواد کا فارمیٹ ہوتا ہے۔

6.1 مائیگریشن فائل کا نام فارمیٹ

ہر مائیگریشن میں ایک "اپ" مائیگریشن فائل اور اس کا موازن کرنے والا "ڈاؤن" مائیگریشن فائل ہوتا ہے۔ مائیگریشن فائل کے نام مندرجہ ذیل فارمیٹ کو ماننا چاہیے:

{version}_{title}.up.{extension}
{version}_{title}.down.{extension}

ویرشن ایک یونیک نمبر ہوتا ہے، جو مائیگریشنز کو لگانے کے ترتیب کو ظاہر کرتا ہے۔ ٹائٹل ایک اختیاری مائیگریشن کا وضاحتی نام ہے۔ ایکسٹینشن ڈیٹا بیس سسٹم پر منحصر ہوتا ہے (مثلاً، SQL ویریئنٹس کے لئے، .sql استعمال کریں)۔

6.2 مائیگریشن مواد کا فارمیٹ

مائیگریشن فائل کا مواد ڈیٹا بیس سسٹم پر منحصر ہوتا ہے، عام طور پر یہ سیدھے SQL لکھنے کا مشمول ہوتا ہے۔

مثال کے طور پر، مندرجہ ذیل دو مائیگریشن فائلز ہیں:

  • 000001_create_users_table.up.sql
  • 000001_create_users_table.down.sql

مائیگریشن فائل 000001_create_users_table.up.sql

CREATE TABLE IF NOT EXISTS users(
   user_id serial PRIMARY KEY,
   username VARCHAR (50) UNIQUE NOT NULL,
   password VARCHAR (50) NOT NULL,
   email VARCHAR (300) UNIQUE NOT NULL
);

مائیگریشن فائل 000001_create_users_table.down.sql، ڈاؤن فائل عموماً پچھلے عمل کو واپس لینے کے لئے استعمال ہوتا ہے، عموماً رول بیک مقاصد کے لئے۔

DROP TABLE IF EXISTS users;

6.3 مہاجرت کی الٹ پلٹ

الٹ پلٹ مہاجرت لکھنا بہترین عمل ہے۔ یہ مطلب ہے کہ اوپر اور نیچے مہاجرت کو کسی بھی ورژن پر چلایا جا سکتا ہے تاکہ ڈیٹا بیس کی حالت کو دوبارہ بنایا اور صفائی دی جا سکے۔

الٹ پلٹ ہونے کی یقینی بنانے کے لئے ہر مہاجرت کا ایک موافق "اوپر" اور "نیچے" مہاجرت فائل ہونا چاہئے۔ "اوپر" مہاجرت فائل مہاجرت کو لاگو کرنے کے عملات شامل ہوتی ہیں، جبکہ "نیچے" مہاجرت فائل مہاجرت کو منسوخ کرنے کے عملات شامل ہوتی ہیں۔

7. MySQL کا استعمال

Go Migrate مائی کرنے بالے MySQL ڈیٹا بیس کے لئے حمایت فراہم کرتا ہے۔ MySQL ڈیٹا بیس سے منسلک ہونے کے لئے، ڈیٹا بیس یو آر ایل مندرجہ ذیل فارمیٹ میں ہونا ضروری ہے۔

mysql://user:password@tcp(host:port)/dbname?query

یو آر ایل میں کوئیری پیرامیٹرز شامل کر سکتے ہیں، مثلاً مہاجرت بینکے کا نام، TLS پیرامیٹرز، وغیرہ۔ کوئیری پیرامیٹرز کی مکمل فہرست کے لئے، براہ کرم Go Migrate MySQL documentation کا اشارہ کریں۔

7.1 یو آر ایل کوئیری پیرامیٹرز

  • x-migrations-table: مہاجرت کی جدول کا نام۔
  • x-no-lock: GET_LOCK/RELEASE_LOCK کو چھوڑنے کے لئے true پر سیٹ کریں۔ ملٹی ماسٹر MySQL ورژنز کے لئے کارآمد ہے۔
  • x-statement-timeout: مخصوص نمبر ملی سیکنڈز سے زیادہ وقت لینے والے کسی بھی انہملا کو منسوخ کرتا ہے۔
  • dbname: منسوبہ ڈیٹا بیس کا نام۔
  • user: لاگ ان ہونے والا صارف۔
  • password: صارف کا پاس ورڈ۔
  • host: جوڑنے والا ہوسٹ۔
  • port: بائنڈ کرنے والا پورٹ۔
  • tls: TLS/SSL رموز بندی کنکشن پیرامیٹرز۔
  • x-tls-ca: CA (Certificate Authority) فائل کی لوکیشن۔
  • x-tls-cert: کلائنٹ سرٹیفکیٹ کی فائل کی لوکیشن۔
  • x-tls-key: نجی کلید کی فائل کی لوکیشن۔
  • x-tls-insecure-skip-verify: اسپتال سے استعمال کرنے کا فیصلہ کریں۔

7.2 موجودہ مستقلین کے ساتھ استعمال کرنا

اگر آپ Go Migrate کو موجودہ MySQL کلائنٹ کے ساتھ استعمال کرنا چاہتے ہیں، تو براہ کرم یقینی بنائیں کہ کلائنٹ بناتے وقت multiStatements=true پیرامیٹر کا استعمال کریں۔ یہاں ایک مثال ہے۔

package main

import (
    "database/sql"
    
    _ "github.com/go-sql-driver/mysql"
    "github.com/golang-migrate/migrate/v4"
    "github.com/golang-migrate/migrate/v4/database/mysql"
    _ "github.com/golang-migrate/migrate/v4/source/file"
)

func main() {
    db, _ := sql.Open("mysql", "user:password@tcp(host:port)/dbname?multiStatements=true")
    driver, _ := mysql.WithInstance(db, &mysql.Config{})
    m, _ := migrate.NewWithDatabaseInstance(
        "file:///migrations",
        "mysql", 
        driver,
    )
    
    m.Steps(2)
}

یہ کوڈ درکار پیکیجز کو درآمد کرتا ہے، ایک MySQL ڈیٹا بیس کلائنٹ بناتا ہے، اور گو مائیگریٹ کو ڈیٹا بیس انسٹنس کے ساتھ آغاز کرتا ہے۔ پھر Steps میتھڈ کا استعمال کرکے دو مہاجرتس منسلک کرتا ہے۔