Go (Golang) में डेटाबेस माइग्रेशन: पूर्ण गाइड

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Go (Golang) में डेटाबेस माइग्रेशन: डेटा स्कीमा कैसे मैनेज करें

Go में एप्लिकेशन डेवलप करते समय, कभी न कभी डेटाबेस की संरचना बदलने की ज़रूरत पड़ती है: नए टेबल जोड़ना, मौजूदा कॉलम बदलना, इंडेक्स बनाना। अलग-अलग वातावरणों (लोकल डेवलपमेंट, स्टेजिंग, प्रोडक्शन) पर SQL स्क्रिप्ट्स को मैन्युअली चलाने से गलतियाँ और डेटा असंगति होती है। इसका समाधान है डेटाबेस माइग्रेशन (database migrations)।

Go इकोसिस्टम में माइग्रेशन मैनेज करने के लिए कई परिपक्व लाइब्रेरीज़ मौजूद हैं। इस लेख में हम तीन सबसे लोकप्रिय टूल्स को विस्तार से समझेंगे: golang-migrate/migrate, pressly/goose और rubenv/sql-migrate। आप सीखेंगे कि इन्हें कैसे इंस्टॉल करें, कॉन्फ़िगर करें और उपयोग करें, साथ ही best practices से भी परिचित होंगे।

माइग्रेशन क्या हैं और इनकी ज़रूरत क्यों है?

माइग्रेशन एक फ़ाइल (या फ़ाइलों का सेट) है जिसमें डेटाबेस स्कीमा बदलने के लिए SQL कमांड होते हैं। प्रत्येक माइग्रेशन का एक अनूठा आइडेंटिफ़ायर (आमतौर पर टाइमस्टैम्प या नंबर) और दो दिशाएँ होती हैं: up (बदलाव लागू करना) और down (बदलाव वापस लेना)।

माइग्रेशन के मुख्य लाभ:

  • स्कीमा का वर्जन कंट्रोल — बदलावों का इतिहास कोड के साथ रिपॉजिटरी में स्टोर रहता है।
  • रिप्रोड्यूसिबिलिटी — सभी वातावरणों पर एक जैसे बदलाव लागू होते हैं।
  • बदलाव वापस लेना — पिछली स्कीमा पर जल्दी लौटने की सुविधा।
  • टीम वर्क — डेवलपर्स एक-दूसरे के बदलावों को ओवरराइट नहीं करते।

1. golang-migrate/migrate

Go में माइग्रेशन के लिए सबसे लोकप्रिय लाइब्रेरी। PostgreSQL, MySQL, SQLite, MongoDB और कई अन्य डेटाबेस को सपोर्ट करती है।

इंस्टॉलेशन

go get -u github.com/golang-migrate/migrate/v4
go install -tags 'postgres' github.com/golang-migrate/migrate/v4/cmd/migrate@latest

माइग्रेशन की संरचना

migrations फ़ोल्डर बनाएँ और {timestamp}_{title}.{direction}.sql फॉर्मेट में फ़ाइलें जोड़ें:

migrations/
  000001_create_users_table.up.sql
  000001_create_users_table.down.sql
  000002_add_email_column.up.sql
  000002_add_email_column.down.sql

माइग्रेशन का उदाहरण (up)

-- 000001_create_users_table.up.sql
CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    created_at TIMESTAMP DEFAULT NOW()
);

माइग्रेशन का उदाहरण (down)

-- 000001_create_users_table.down.sql
DROP TABLE IF EXISTS users;

Go कोड से माइग्रेशन लागू करना

package main

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

func main() {
    m, err := migrate.New(
        "file://migrations",
        "postgres://localhost:5432/mydb?sslmode=disable")
    if err != nil {
        panic(err)
    }
    if err := m.Up(); err != nil && err != migrate.ErrNoChange {
        panic(err)
    }
}

2. pressly/goose

Goose एक हल्का और तेज़ टूल है जो Go में माइग्रेशन लिखने (सिर्फ SQL नहीं) को भी सपोर्ट करता है। यह उन प्रोजेक्ट्स के लिए आदर्श है जहाँ कोड-साइड लॉजिक की ज़रूरत होती है।

इंस्टॉलेशन

go get github.com/pressly/goose/v3/cmd/goose

माइग्रेशन बनाना

goose create create_users_table sql

इससे 20250101120000_create_users_table.sql जैसी फ़ाइल बनेगी। सामग्री:

-- +goose Up
CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100) NOT NULL
);

-- +goose Down
DROP TABLE IF EXISTS users;

Go-माइग्रेशन (एडवांस्ड विकल्प)

Goose database/sql का उपयोग करके Go में माइग्रेशन लिखने की सुविधा देता है:

package migrations                    

अनुशंसाएँ