প্রকল্প সম্পর্কে

Goose একটি ডেটাবেস মাইগ্রেশন টুল যা কমান্ড-লাইন ইন্টারফেস এবং Go লাইব্রেরি উভয় হিসেবেই বিতরণ করা হয়। এটি SQL বা Go ফাংশন হিসেবে লেখা ইনক্রিমেন্টাল মাইগ্রেশন ফাইলের মাধ্যমে ডেটাবেস স্কিমার বিবর্তন পরিচালনা করে। সমর্থিত ডেটাবেসের মধ্যে রয়েছে Postgres, MySQL, MariaDB, Spanner, SQLite, YDB, ClickHouse, MSSQL, Vertica, Redshift, TiDB, StarRocks, Turso এবং Azure SQL। বিল্ড ট্যাগের মাধ্যমে অপ্রয়োজনীয় ড্রাইভার বাদ দিয়ে বাইনারিটির আকার কমানো যায়। ইনস্টলেশন `go install`, macOS-এ Homebrew, অথবা কাস্টম বিল্ডের মাধ্যমে করা যায়। কনফিগারেশন কমান্ড আর্গুমেন্ট হিসেবে অথবা GOOSE_DRIVER, GOOSE_DBSTRING, GOOSE_MIGRATION_DIR এবং GOOSE_TABLE-এর মতো এনভায়রনমেন্ট ভেরিয়েবলের মাধ্যমে পাস করা যায়, যার মধ্যে `.env` ফাইল থেকে লোড করাও অন্তর্ভুক্ত। CLI-টি মাইগ্রেশন তৈরি (`create`), প্রয়োগ (`up`, `up-by-one`, `up-to`), রোলব্যাক (`down`, `down-to`, `reset`, `redo`), অবস্থা পরিদর্শন (`status`, `version`) এবং ফাইল যাচাইকরণ (`validate`, `fix`) এর জন্য কমান্ড প্রদান করে। একটি `-allow-missing` ফ্ল্যাগ আউট-অব-অর্ডার মাইগ্রেশন সক্ষম করে, এবং টিম ওয়ার্কফ্লোর জন্য টাইমস্ট্যাম্পের সাথে ক্রমিক নম্বরিং একত্রিত একটি হাইব্রিড ভার্সনিং পদ্ধতি সুপারিশ করা হয়। SQL মাইগ্রেশনগুলো `-- +goose Up` এবং `-- +goose Down` এর মতো অ্যানোটেশন ব্যবহার করে, জটিল স্টেটমেন্টের জন্য ঐচ্ছিক `NO TRANSACTION` এবং `StatementBegin`/`StatementEnd` মার্কার সহ। `ENVSUB ON`/`ENVSUB OFF` দিয়ে প্রতি ফাইলে এনভায়রনমেন্ট ভেরিয়েবল প্রতিস্থাপন সক্ষম করা যায়। Go মাইগ্রেশনগুলো `goose.AddMigration` এর মাধ্যমে নিবন্ধিত হয় এবং Go-এর embed প্যাকেজ ব্যবহার করে বাইনারিতে এমবেড করা যায়। সিডিং ডেটা এবং এমবেডেড মাইগ্রেশনও সমর্থিত।