গো মাইগ্রেট টিউটোরিয়াল
১. গো মাইগ্রেট সংক্ষেপ
গো মাইগ্রেট হল একটি ডাটাবেস মাইগ্রেশন ব্যবস্থাপনা টুল, যা গো ভাষায় লেখা হয়েছে। এটি গো প্রকল্পগুলিতে একটি কমান্ড-লাইন ইন্টারফেস (CLI) হিসেবে ব্যবহার করা যেতে পারে বা গো প্রকল্পে লাইব্রেরি হিসেবে আমদানি করা যেতে পারে। গো মাইগ্রেট পড়ালে ডাটাবেস মাইগ্রেশন ফাইলগুলির বিভিন্ন উৎস থেকে পড়তে এবং সঠিক অর্ডারে তাদের ডাটাবেসে প্রয়োগ করতে পারে। এটি বিভিন্ন ডাটাবেস ড্রাইভার এবং মাইগ্রেশন উৎস সমর্থন করে।
২. সংস্করণ
গো মাইগ্রেট বেশ কিছু সংস্করণ সমর্থন করে, যেমন:
- মাস্টার: নতুন বৈশিষ্ট্য এবং বাগ পরিষ্কার সহ সর্বশেষ সংস্করণ
- v4: স্থিতিশীল সংস্করণ, প্রোডাকশন পরিবেশের জন্য উপযুক্ত
- v3: আর সমর্থন করা হয় না এবং ব্যবহার করা উচিত নয়
৩. ইনস্টলেশন
গো মাইগ্রেট ব্যবহার করতে আপনাকে গো প্যাকেজটি ইন্সটল করতে হবে। ইনস্টলেশনের জন্য নিম্নলিখিত কমান্ডটি রান করুন:
go get -u -d github.com/golang-migrate/migrate/v4
cd $GOPATH/src/github.com/golang-migrate/migrate/v4
৩. গো মাইগ্রেট ব্যবহার করা
গো মাইগ্রেট ব্যবহার করা যেতে পারে CLI হিসেবে বা গো প্রকল্পে লাইব্রেরি হিসেবে।
৩.০. ডাটাবেস সংযোগ URL
CLI বা গো কোড ব্যবহার করা হলে, ডাটাবেস ইউআরএল সংযোগের জন্য কনফিগার করা থাকতে হবে।
URL ফরম্যাট:
dbdriver://username:password@host:port/dbname?param1=true¶m2=false
এই ইউআরএল হল ডাটাবেস সংযোগ ইউআরএল, যা ডাটাবেসে সংযোগ করতে এবং সংযোগের পরিবেশনা সুনির্দিষ্ট করতে ব্যবহৃত হয়। এখানে প্রতিটি অংশের জন্য নিম্নলিখিত ব্যাখ্যা দেওয়া আছে:
-
dbdriver://
: এটি ডাটাবেস ড্রাইভার প্রোটোকল যা ব্যবহার করে, কোন ডাটাবেস ড্রাইভার ব্যবহার করতে হবে তা সুনির্দিষ্ট করতে, উদাহরণস্বরূপ, mysql। -
username:password
: এটি প্রমাণীকরণের জন্য ব্যবহৃত ব্যবহারকারীর নাম এবং পাসওয়ার্ড। সাধারণত, ব্যবহারকারীর নাম এবং পাসওয়ার্ডটি আমাদের কোলোন (:)-এর মাধ্যমে পৃথক করা হয়। -
@
: এই প্রতীকটি হোস্টনেম এবং পোর্টটি ব্যবহারকারীর নাম এবং পাসওয়ার্ডের থেকে পৃথক করার জন্য ব্যবহৃত হয়। -
host:port
: এটি ডাটাবেস সার্ভারের হোস্টনেম এবং পোর্ট নম্বর। হোস্টনেম হল ডাটাবেস সার্ভারের আইপি ঠিকানা বা ডোমেইন নাম, এবং পোর্ট নম্বরটি হল ডাটাবেস সার্ভার যা শুনছে। -
/dbname
: শুননোর জন্য ডাটাবেসের নাম। -
?param1=true¶m2=false
: এই অংশটি অতিরিক্ত সংযোগ প্যারামিটার সূচিত করার জন্য ব্যবহৃত হয়। এই উদাহারণে, দুটি প্যারামিটার রয়েছে।
এই মনোনিয়মিত প্যারামিটারগুলি ডাটাবেস ড্রাইভার এবং ডাটাবেস সার্ভারের বিশেষ প্রায়োগিক প্রয়োজনীয়তাগুলি নির্ধারণ করে বিশেষ বৈশিষ্ট্য বা আচরণগুলি কনফিগার করার জন্য ব্যবহৃত হতে পারে।
পোস্টগ্রেস সংযোগ প্যারামিটার
postgres://postgres:password@localhost:5432/example?sslmode=disable
SQLite সংযোগ প্যারামিটার
sqlite3://path/to/database?query
মঙ্গোডবি সংযোগ প্যারামিটার
mongodb://user:password@host:port/dbname?query
৩.১ সিএলআই ব্যবহার
৩.১.১ মৌলিক ব্যবহার
সম্পাদনকে ব্যবহার করতে, নিম্নলিখিত কমান্ডটি রান করুন:
migrate -source file://path/to/migrations -database postgres://localhost:5432/database up 2
এই কমান্ডটি নির্দিষ্ট উৎস থেকে মাইগ্রেশন প্রয়োগ করে এবং দেওয়া ডাটাবেসে মাইগ্রেশনের সংখ্যা প্রয়োগ করে। "2" সংখ্যাটি মাইগ্রেশন প্রয়োগ করার সংখ্যা নির্দিষ্ট করে।
৩.১.২ ডকার ব্যবহার
গো মাইগ্রেট ছাড়া ডকার ব্যবহার করা যেতে পারে। নিম্নলিখিত কমান্ডটি রান করুন:
docker run -v {{ migration dir }}:/migrations --network host migrate/migrate -path=/migrations/ -database postgres://localhost:5432/database up 2
এই কমান্ডটি একটি ডকার কন্টেনারে গো মাইগ্রেট চালায় এবং নির্দিষ্ট উৎস থেকে মাইগ্রেশন প্রয়োগ করে।
3.2 আপনার Go প্রকল্পে ব্যবহার করা
আপনার Go প্রকল্পে 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)
}
এই কোডটি Go Migrate এর সাথে নির্দিষ্ট উৎস এবং ডাটাবেস দিয়ে আমল করে, তারপরে 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
মেথড ব্যবহার করে নতুন Go Migrate ইনস্ট্যান্স তৈরি করে, উৎস এবং ডাটাবেস ড্রাইভার নির্দিষ্ট করে। শেষে, Up
মেথড ব্যবহার করে মাইগ্রেশন প্রয়োগ করে।
4. সমর্থিত ডাটাবেস ড্রাইভারস
Go Migrate এর সমর্থিত বহুলায়নি ডাটাবেস ড্রাইভারগুলি সম্পূর্ণ সমর্থন করে, যেমনঃ
- PostgreSQL
- PGX v4
- PGX v5
- Redshift
- Ql
- Cassandra
- SQLite
- SQLite3
- SQLCipher
- MySQL/MariaDB
- Neo4j
- MongoDB
- CrateDB
- Shell
- Google Cloud Spanner
- CockroachDB
- YugabyteDB
- ClickHouse
- Firebird
- MS SQL Server
5. সমর্থিত মাইগ্রেশন উৎস
Go Migrate, বিভিন্ন মাইগ্রেশন উৎস সমর্থন করে, যেমনঃ
- ফাইল সিস্টেম: স্থানীয় ফাইল সিস্টেম থেকে মাইগ্রেশন পড়ুন।
- io/fs: Go
io/fs
প্যাকেজ ব্যবহার করে মাইগ্রেশন পড়ুন। - Go-Bindata:
jteeuwen/go-bindata
প্যাকেজ ব্যবহার করে এম্বেডেড বাইনারি ডেটা থেকে মাইগ্রেশন পড়ুন। - pkger:
markbates/pkger
প্যাকেজ ব্যবহার করে এম্বেডেড বাইনারি ডেটা থেকে মাইগ্রেশন পড়ুন। - গিটহাব: দূরবর্তী গিটহাব ভিত্তিক মাইগ্রেশন পড়ুন।
- গিটহাব এন্টারপ্রাইজ: দূরবর্তী গিটহাব এন্টারপ্রাইজ ভিত্তিক মাইগ্রেশন পড়ুন।
- বিটবাকেট: দূরবর্তী বিটবাকেট ভিত্তিক মাইগ্রেশন পড়ুন।
- গিটল্যাব: দূরবর্তী গিটল্যাব ভিত্তিক মাইগ্রেশন পড়ুন।
- AWS S3: আমাজন ওয়েব সার্ভিসের S3 থেকে মাইগ্রেশন পড়ুন।
- গুগল ক্লাউড স্টোরেজ: গুগল ক্লাউড প্ল্যাটফর্ম স্টোরেজ থেকে মাইগ্রেশন পড়ুন।
আপনার প্রকল্পের প্রয়োজনীয়তার উপর নির্ভর করে, আপনি উপরোক্ত সমর্থিত ফাইল সংরক্ষণ উৎসে ডাটাবেস মাইগ্রেশন ফাইল সঞ্চয় করতে পারেন।
6. মাইগ্রেশন ফাইল
Go Migrate এ মাইগ্রেশন ফাইলগুলির নির্দিষ্ট নাম এবং বিষয় ফরম্যাট থাকে।
6.1 মাইগ্রেশন ফাইলের নামের ফরম্যাট
প্রতি মাইগ্রেশনের "up" মাইগ্রেশন ফাইল এবং সাথে একই নামের "down" মাইগ্রেশন ফাইল থাকে। মাইগ্রেশন ফাইলের নামগুলি নিম্নলিখিত ফরম্যাট মেনে চলতে হবে:
{সংস্করণ}_{শিরোনাম}.up.{এক্সটেনশন}
{সংস্করণ}_{শিরোনাম}.down.{এক্সটেনশন}
সংস্করণ
হল মাইগ্রেশন প্রয়োগের অনুক্রমোবদ্ধতা প্রতিনিধিত্ব করার একক সংখ্যা। শিরোনাম
হল মাইগ্রেশনের ঐক্যবদ্ধ বর্ণনা (ঐচ্ছিক)। এবং এক্সটেনশন
তথ্য-ভিত্তিক ব্যবহার করা ডাটাবেস সিস্টেমের উপর নির্ভর করে (যেমনঃ 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, down
ফাইলটি পূর্ববর্তী অপারেশন সরাতে প্রধানত ব্যবহৃত হয়, সাধারণভাবে ফিরিয়ে নেওয়ার উদ্দেশ্যে।
DROP TABLE IF EXISTS users;
6.3 পালাতবিস্তারের সম্ভাবনা
পালাতবিস্তারের জন্য প্রস্তাবিত পদ্ধতি হল বিশেষ অনুশীলনের সাথে মাইগ্রেশনের প্রতিচ্ছবি "উপ" এবং "নিচে" মাইগ্রেশন ফাইল থাকা। "উপ" মাইগ্রেশন ফাইল অনুশীলনের প্রক্রিয়াগুলি ধারণ করে, যখন "নিচে" মাইগ্রেশন ফাইল মাইগ্রেশন বাতিল করতে ব্যাবসায়িকভাবে প্রয়োজনীয় অনুশীলনগুলি ধারণ করে।
7. মাইয়ামার ব্যবহার
গো-মাইগ্রেট MySQL ডেটাবেসের জন্য সমর্থন প্রদান করে। MySQL ডেটাবেসে সংযোগ করতে, ডাটাবেস URL নিম্নলিখিত ফর্ম্যাটে থাকতে হবে।
mysql://user:password@tcp(host:port)/dbname?query
URL অনুমতি দেওয়া হতে পারে প্রশ্ন প্রতিবেদনসমূহ, যেমন মাইগ্রেশন টেবিলের নাম, TLS প্যারামিটার, ইত্যাদি। পূর্ণ তালিকার জন্য দয়া করে Go Migrate MySQL documentation দেখুন।
7.1 URL প্রশ্ন প্রতিবেদনসমূহ
-
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
: সিএ (সাবেকটিফিকেট অথরিটি) ফাইলের অবস্থান। -
x-tls-cert
: ক্লায়েন্ট সার্টিফিকেট ফাইলের অবস্থান। -
x-tls-key
: ব্যক্তিগত কী ফাইলের অবস্থান। -
x-tls-insecure-skip-verify
: ব্যবহার করতে কোনও এসএসএল পরীক্ষণ করবেনা।
7.2 বিদ্যমান গ্রাহকদের সাথে ব্যবহার
যদি আপনি গো-মাইগ্রেট ব্যবহার করতে চান বিদ্যমান 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
পদক্ষেপ ব্যবহার করে দুটি মাইগ্রেশন প্রয়োগ করে।