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.sqlSQL माइग्रेशन का उदाहरण
फ़ाइल 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 12. 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