Go में डेटाबेस माइग्रेशन: उपकरणों और प्रथाओं का अवलोकन

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

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

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

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



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



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



माइग्रेशन क्या हैं और इनकी आवश्यकता क्यों है?



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



मुख्य लाभ:

  • DB स्कीमा परिवर्तनों का स्वचालन
  • पुनरुत्पादन क्षमता - किसी भी वातावरण पर समान परिणाम
  • परिवर्तनों को वापस लाने की क्षमता
  • कोड में परिवर्तनों के इतिहास का भंडारण (VCS-अनुकूल)


1. golang-migrate/migrate लाइब्रेरी



यह Go में माइग्रेशन के लिए सबसे लोकप्रिय लाइब्रेरी है। यह PostgreSQL, MySQL, SQLite, MongoDB और अन्य DBMS का समर्थन करती है। माइग्रेशन शुद्ध SQL या Go दोनों में लिखे जा सकते हैं।



स्थापना

go get -u github.com/golang-migrate/migrate/v4


माइग्रेशन फ़ाइलों की संरचना

फ़ाइलें migrations/ फ़ोल्डर में स्थित होती हैं और निम्न टेम्पलेट के अनुसार नामित की जाती हैं:

{timestamp}_{title}.up.sql{timestamp}_{title}.down.sql

उदाहरण:

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


SQL माइग्रेशन का उदाहरण

फ़ाइल 000001_create_users_table.up.sql:

CREATE TABLE IF NOT EXISTS users (    id SERIAL PRIMARY KEY,    name VARCHAR(255) NOT NULL,    created_at TIMESTAMP DEFAULT NOW());

फ़ाइल 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://user:password@localhost:5432/dbname?sslmode=disable", ) if err != nil { panic(err) }

// सभी उपलब्ध माइग्रेशन लागू करें (Up) if err := m.Up(); err != nil && err != migrate.ErrNoChange { panic(err) }

// अंतिम माइग्रेशन वापस लें (Down) // if err := m.Steps(-1); err != nil { // panic(err) // }}


migrate CLI उपकरण

कमांड लाइन उपयोगिता भी उपलब्ध है:

migrate create -ext sql -dir migrations -seq create_users_tablemigrate -path migrations -database "postgres://..." upmigrate -path migrations -database "postgres://..." down 1


2. pressly/goose लाइब्रेरी



Goose एक और लोकप्रिय उपकरण है, जिसे मूल रूप से Ruby on Rails के ActiveRecord माइग्रेशन के एनालॉग के रूप में बनाया गया था। यह SQL और Go माइग्रेशन के साथ-साथ बिल्ट-इन CLI का समर्थन करता है।



स्थापना

go get -u github.com/pressly/goose/v3


फ़ाइल संरचना

फ़ाइलों का नाम {timestamp}_{title}.sql (up/down में विभाजन के बिना - सब कुछ टिप्पणियों के माध्यम से एक ही फ़ाइल में) होता है:

migrations/  20240101120000_create_users_table.sql  20240102150000_add_email_to_users.sql


SQL माइग्रेशन का उदाहरण

अनुशंसाएँ