Go migration using postgresql
مایگریشن یعنی دولوپر از اول تمام جزییات دیتابیس رو بصورت ورژن تعریف بکنه
یعنی هر تغییر جدید در یک ورژن جدید نوشته میشه و در صو.رتی که هر تغییر رو بخوایم برداریم به ورژن قبلی برمیگردیم
کار با او به این صورته که و قتی درکتوری اولیه رو ساختیم و ماژولارش کردیم در اولین حرکت با وارد کردن این کمند در cli به برنامه میگیم که یک پوشه بسازه و نسخه های مختلف دیتابیس رو در اون بگنجونه
migrate create -ext sql -dir <the direction/> -seq <the file name >
بخش the direction مسیری هست که برای نگهداشتن نسخه ها میسازیم و the file نامی هست که به هر نسخه اختصاص میدیم و بهتره شامل نشانی از تغییرات اعمال شده باشه
عبارت seq- مرتب سازی نسخه ها رو برعهده داره
(بهتره بدونیم که migration و پکیجش رو از پیش باید نصب کرده باشیم)
با این کار در مسیر db/migration در هر مرحله که نسخه ی جدید رو وارد میکنیم دو فایل با پسوند down.sql & up.sql ساخته میشه و معلومه که یکی برای migrate به نسخه ی جدیده و یکی دیگه برای backward شدن به نسخه ی قدیمی تر
کار با او به این شکله که در فایل up ما کوئری های مربوط به ریلیز جدید رو وارد میکنیم و در فایل down کوئری برگشت به حالت قبلی رو / مثلا چون در مرحله ای اولیم up ما شامل ساخت تیبل و down شامل دراپ اون میشه :
عبارتهای BEGIN; & COMMIT; در ابتدا و انتها یک بلاکایز کردنه چیز خاصی نیست ! وقتی دستو رما فقط یه دونه ست حتی لازم به نوشتن این عبارات هم نیست
اون دش های بالا رو اگه خواستین دقیقا همین کدها رو وارد کنید به آندرلاین تغییر بدین
pr-name …> pr_name
اما دستوری لازمه که بوسیله ی اون این کدهای جدید شناسایی جنریت دیباگ و ست بشن .. یعنی یه دستوری به برنامه بدیم که این ریلیز جدید رو به عنوان دیتابیس نو مورد استفاده قرار بده :
migrate -path <the migration path> -database "postgresql://username:password@localhost:5432/database_name?sslmode=disable" -verbose up
کل دستور مورد خاصی نداره جز اینکه در بخش username:password شما یوزرنیم و پسورد کانتینری که ساختید رو وارد میکنید برای دسترسی به اون/ و بخش sslmode که باید disable باشه و up در انتهای دستور که با down دو کلید واژه برای ریلیز جدید یا بک وارد هستن و ما اون ها رو جایگزین میکنیم طبق حالت هایی که نیاز داریم
اما قبل از اینکه واردش کنیم یه سری مراحل داریم :
گیچه ل داره ! :) این کلمه رو فراموش کن شوخی بود
اما وارد cli میشیم و با دستور
sudo docker container exec -it <the container name >bash
الحمد لله اسم container رو که میدونیم ! میذاریم جای خودش و وارد میشیم ..
با دستور su postgres ادمینستریتور میشیم :
با دستور : psql -U postgres -W به محتوای container دسترسی خواهیم داشت :
با دستور
create database <database name >
یک دیتا بیس بسازید :
حالا اسم دیتابیس رو در محلی که گفتم اون بالا (کجا گفته بودم ? توی دستور migrate up) بنویسید و دستور رو اجرا کنید تا درون این دیتا بیس برای شما تیبل رو بسازه
من اسم دیتابیسم رو گذاشتم migration
حالا با دستور \c migration (بک اسلش سی و اسم دیتابیس) میریم تو دیتا بیسی که ساختیم و صدا میزنیم تیبلی رو که ورژن یک دیتابیسمونه :
حالا یه ورژن جدید به دیتابیس میدیم و در اون بهش یه تیبل دیگه اضافه میکنیم :
من این تیبل رو اسمش رو میگذارم users :
برای اینکار کل مراحل ورژنینگ قبل رو تکرار میکنیم :
قاعدتا سربسر گذاشتن این قابلیت و تکنولوژی مایگریشن نیاز وقت انرژی و صبره و شما باید چندین ورژن بسازید مایگریت کنید برگردید تا به طور کامل جا بیافته
لازمه یه مورد رو یا آوری کنم ساختن اسکیما رو اینجا دستی انجام دادیم این درحالیه که شما باید از طریق مایگریشن اینکارو بکنید برای اینکار در کوءریتون این دستور رو قبل از create table اضافه کنید :
CREATE SCHEMA <the schema name>;
و در دستور جنریت کردن migration که بالا تر در موردش حرف زدم جای database name رو خالی بذارید یعنی اینجوری :
migrate -path <the migration path>-database "postgresql://username:password@localhost:5432/database_name?sslmode=disable" -verbose up migrate -path <the migration path> -database "postgresql://username:password@localhost:5432/?sslmode=disable" -verbose up
اینطوری کل مراحل ساخت دستی دیتا بیس و اسکیما رو skip کردین
به داکیومنتیشن postgresql برید و در مورد آلتر کردن یاد بگیرید
و به دوستانی هم که اینم مطلب رو میبینن و خیلی کارشون درسته عرض میکنم بابا take it easy
من میخوام همه چی انقد که به نظر میاد پیچیده نباشه