khaled moazedi
khaled moazedi
خواندن ۳ دقیقه·۲ سال پیش

Go migration postgresql


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 &quotpostgresql://username:password@localhost:5432/database_name?sslmode=disable&quot -verbose up

کل دستور مورد خاصی نداره جز اینکه در بخش username:password شما یوزرنیم و پسورد کانتینری که ساختید رو وارد میکنید برای دسترسی به اون/ و بخش sslmode که باید disable باشه و up در انتهای دستور که با down دو کلید واژه برای ریلیز جدید یا بک وارد هستن و ما اون ها رو جایگزین میکنیم طبق حالت هایی که نیاز داریم

اما قبل از اینکه واردش کنیم یه سری مراحل داریم :

گیچه ل داره ! :) این کلمه رو فراموش کن شوخی بود

اما وارد cli میشیم و با دستور

sudo docker container exec -it <the container name >bash

الحمد لله اسم container رو که میدونیم ! میذاریم جای خودش و وارد میشیم ..

container
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 &quotpostgresql://username:password@localhost:5432/database_name?sslmode=disable&quot -verbose up migrate -path <the migration path> -database &quotpostgresql://username:password@localhost:5432/?sslmode=disable&quot -verbose up

اینطوری کل مراحل ساخت دستی دیتا بیس و اسکیما رو skip کردین

به داکیومنتیشن postgresql برید و در مورد آلتر کردن یاد بگیرید

و به دوستانی هم که اینم مطلب رو میبینن و خیلی کارشون درسته عرض میکنم بابا take it easy

من میخوام همه چی انقد که به نظر میاد پیچیده نباشه


go migrationmigrationگولنگdatabasepostgres
back end developer .. copy writter
شاید از این پست‌ها خوشتان بیاید