نحوه ایجاد مهاجرت های پایگاه داده در Go با استفاده از Docker و Postgres
Go یک زبان برنامه نویسی سریع با نحو نسبتاً ساده است. در حین یادگیری Go، یادگیری نحوه ساخت API و نحوه استفاده از آنها برای برقراری ارتباط با پایگاه داده بسیار مهم است. در فرآیند یادگیری، تصمیم گرفتم پروژه ای را انجام دهم که در این زمینه به من کمک کرد: یک API ساده ردیابی موجودی.
هنگام کار با یک پایگاه داده SQL مانند Postgres، متوجه شدم که ایجاد تغییرات به موقع در پایگاه داده مهم است. پس اگر شما طرحی دارید که ممکن است در آینده آن را اصلاح کنید، بهترین راه برای انجام این کار مهاجرت پایگاه داده است. این تضمین می کند که تغییرات در پایگاه داده با دقت و بدون تأثیر بر داده های موجود انجام می شود.
در این مقاله با انتقال پایگاه داده با استفاده از Docker و Postgres آشنا خواهید شد.
فهرست مطالب
چگونه یک داکر کانتینر را راه اندازی و راه اندازی کنیم
نحوه ایجاد و اجرای طرحواره با استفاده از TablePlus
چگونه یک مهاجرت جدید ایجاد کنیم
نحوه ایجاد و رها کردن پایگاه داده در داخل و خارج از کانتینر Docker Postgres
نحوه مشاهده پایگاه داده در TablePlus
مهاجرت پایگاه داده چیست؟
مهاجرت پایگاه داده چیست و چرا باید از آن استفاده کرد؟ خوب، بهعنوان یک توسعهدهنده باطن، هنگام کار بر روی پروژهای که نیاز به ذخیره دادهها در پایگاه داده دارد، باید یک طرح واره برای دادههایی که میخواهید ذخیره کنید، ایجاد کنید.
انتقال پایگاه داده به شما کمک می کند تا ساختار داده ها را در یک پایگاه داده و در این مورد، یک پایگاه داده رابطه ای مدیریت کنید. مهاجرت ها به تغییر طرحواره ها از وضعیت فعلی به حالت خاص/مطلوب کمک می کند. ممکن است شامل اضافه کردن جداول و ستون ها، حذف عناصر یا تغییر انواع و محدودیت ها باشد.
یکی از اهمیت های مهاجرت پایگاه داده ایجاد تغییرات در پایگاه داده قابل تکرار و بدون نگرانی بدون نگرانی از دست دادن داده است.
اگر مطمئن نیستید که طرح داده نهایی شما چگونه خواهد بود، توصیه می شود از مهاجرت استفاده کنید. از این نظر می توانید تغییرات را به صورت تدریجی در آن اعمال کنید.
چگونه یک داکر کانتینر را راه اندازی و راه اندازی کنیم
ترمینال خود را باز کنید و یک دایرکتوری جدید mkdir tracking-inventory-app
ایجاد کنید.
سپس یک تصویر postgres را از Docker Hub بکشید. من از تگ postgres:14-alpine
استفاده کردم. می توانید از هر برچسبی که می خواهید استفاده کنید.
در ترمینال خود، موارد زیر را بچسبانید و اینتر را فشار دهید:
$ docker pull postgres:14-alpine
پس از نصب، کانتینر را با استفاده از دستور docker run
راه اندازی کنید:
$ docker run --name postgres14 -e POSTGRES_USER=root -e POSTGRES_PASSWORD=passwordd -p 5432:5432 -d postgres:14-alpine
پرچم --name
به نام کانتینر اشاره دارد. پرچم -e
به متغیرهای محیطی اشاره دارد. پرچم -p
به معنای انتشار است. شما باید کانتینر خود را روی یک پورت مشخص اجرا کنید. پرچم -d
به این معنی است که می خواهید آن را در حالت جدا شده اجرا کنید.
پس از اینکه Enter را فشار دادید، در صورت نصب Docker Desktop خود را باز کنید. اگر این کار را نکردید، می توانید آن را از وب سایت docker دانلود کنید.
در Docker Desktop خود، باید ببینید که کانتینر راه اندازی شده است:
می توانید با استفاده از TablePlus با پایگاه داده ارتباط برقرار کنید:
اتصال را تست کنید. اگه بيان کرد ok باشه وصل کن اگر در ویندوز هستید و خطای احراز هویت را نشان می دهد، به دکمه شروع خود بروید و روی Run
کلیک کنید. در پنجره بازشو عبارت services.msc
را تایپ کرده و enter را فشار دهید. به دنبال postgres بگردید و روی stop service کلیک کنید. سپس دوباره سعی کنید وصل شوید.
نحوه ایجاد و اجرای طرحواره با استفاده از TablePlus
من یک طرح و مدل از پیش تعریف شده برای پروژه ردیابی موجودی با نمودار db ایجاد کرده ام. این موجودی ردیابی باید به شما امکان دهد یک آیتم، شماره سریال و مقدار اضافه کنید. پس طرحواره دارای یک item
، serial_number
، id
و فیلدهای created_at
خواهد بود.
CREATE TABLE "inventory" ( "id" uuid PRIMARY KEY, "item" varchar NOT NULL, "serial_number" varchar NOT NULL, "user" uuid NOT NULL, "created_at" timestamptz NOT NULL DEFAULT 'now()' ); CREATE TABLE "user" ( "id" uuid PRIMARY KEY, "name" varchar NOT NULL, "email" varchar UNIQUE NOT NULL, "password" varchar NOT NULL, "created_at" timestamptz NOT NULL DEFAULT 'now()' ); CREATE INDEX ON "inventory" ("item"); ALTER TABLE "inventory" ADD FOREIGN KEY ("user") REFERENCES "user" ("id");
مال من اینجوری به نظر میرسه می توانید TablePlus خود را باز کنید و کد PostgreSQL تولید شده را اضافه کنید و آن را اجرا کنید.
نحوه نصب golang-migrate
گام بعدی این است که golang-migrate
روی سیستم خود نصب کنید. من برای این آموزش از لینوکس در ویندوز استفاده می کنم.
برای نصب آن، به این مستندات مراجعه کنید.
من از لینوکس استفاده می کنم پس از curl
استفاده خواهم کرد:
$ curl -L https://github.com/golang-migrate/migrate/releases/download/v4.12.2/migrate.linux-amd64.tar.gz | tar xvz
هنگامی که با موفقیت نصب شد، در ترمینال خود، دستور migrate -help
اجرا کنید تا دستورات مختلف آن را ببینید.
چگونه یک مهاجرت جدید ایجاد کنیم
پس از نصب golang-migrate
، می توانید یک اسکریپت مهاجرت جدید ایجاد کنید.
ابتدا، در ترمینال خود و در فهرست برنامه ردیابی، کد VS را با دستور code
باز کنید.
پس از انجام این کار، یک پوشه جدید به نام db
و یک پوشه دیگر در داخل پوشه db با نام migrations
ایجاد کنید.
سپس در ترمینال خود دستور زیر را اجرا کنید:
$ migrate create -ext sql -dir db/migration -seq tracking_inventory_schema
پرچم -ext
به پسوندی اشاره دارد که میخواهید مهاجرت با آن ایجاد شود. در این مورد sql است. پرچم -dir
به دایرکتوری اشاره دارد که میخواهید فایلها را در آن ایجاد کنید. پرچم -seq
به شماره ترتیبی فایلهای مهاجرت اشاره دارد.
در کد VS شما باید دو فایل وجود داشته باشد: یکی برای up
و دیگری برای down
. اولی برای ایجاد تغییرات رو به جلو به دایرکتوری استفاده می شود در حالی که دومی برای معکوس کردن تغییرات است.
در فایل up
، شما می خواهید شمای خود را در فایل پیست کنید.
CREATE TABLE "inventory" ( "id" uuid PRIMARY KEY, "item" varchar NOT NULL, "serial_number" varchar NOT NULL, "user" uuid NOT NULL, "created_at" timestamptz NOT NULL DEFAULT 'now()' ); CREATE TABLE "user" ( "id" uuid PRIMARY KEY, "name" varchar NOT NULL, "email" varchar UNIQUE NOT NULL, "password" varchar NOT NULL, "created_at" timestamptz NOT NULL DEFAULT 'now()' ); CREATE INDEX ON "inventory" ("item"); ALTER TABLE "inventory" ADD FOREIGN KEY ("user") REFERENCES "user" ("id");
بسته به پروژه ای که می سازید ممکن است پروژه شما متفاوت به نظر برسد.
برای فایل down
، فقط این را در آن قرار دهید:
DROP TABLE IF EXISTS inventory; DROP TABLE IF EXISTS user;
جدول موجودی باید ابتدا حذف شود زیرا به جدول کاربر اشاره دارد.
نحوه ایجاد و رها کردن پایگاه داده در داخل و خارج از کانتینر Docker Postgres
تحلیل کنید که آیا کانتینر docker شما با استفاده از دستور اجرا می شود:
$ docker ps
اگر اینطور نیست، از دستور docker start ${container name}
برای شروع آن استفاده کنید.
قدم بعدی دسترسی به پوسته postgres با استفاده از دستور زیر است زیرا من روی لینوکس هستم:
$ docker exec -it postgres14 bin/bash
پرچم -it
مخفف پوسته/ترمینال تعاملی است. در داخل این پوسته می توانید دستور createdb
را اجرا کنید:
/# createdb --username=root --owner=root tracking_inventory
پس از ایجاد، می توانید دستور psql
را برای تعامل با db اجرا کنید:
/# psql tracking-inventory psql (14.12) Type "help" for help. tracking_inventory=#
همچنین می توانید پایگاه داده را با دستور dropdb
حذف کنید.
برای خروج از پوسته، از دستور exit
استفاده کنید.
برای ایجاد پایگاه داده در خارج از کانتینر postgres، دستور زیر را وارد کنید:
$ docker exec -it postgres14 createdb --username=root --owner=root tracking_inventory
نحوه مشاهده پایگاه داده در TablePlus
برای مشاهده پایگاه داده ای که ایجاد کرده اید، با استفاده از اتصال قبلی که قبلا ایجاد کرده بودیم، متصل شوید. شما را به پایگاه داده ریشه می برد و سپس روی نماد db در بالا کلیک کنید.
دیتابیس ایجاد شده ظاهر می شود، سپس روی open
کلیک کنید تا باز شود
نحوه اجرای مهاجرت
برای اجرای migrations، این دستور را در ترمینال خود اجرا کنید:
$ migrate -path db/migration -database "postgresql://root:passwordd@localhost:5432/tracking_inventory?sslmode=disable" -verbose up
پرچم -path
مسیری را که حاوی فایل های مهاجرت است مشخص می کند. گزینه -database
آدرس پایگاه داده را مشخص می کند.
در داخل آدرس، درایور postgresql
است. نام کاربری و رمز عبور به ترتیب root
و passwordd
است. اضافه کردن گزینه sslmode=disable
نیز مهم است زیرا Postgres SSL را به طور پیش فرض فعال نمی کند.
حالا migrations را اجرا کنید:
$ migrate -path db/migration -database "postgresql://root:passwordd@localhost:5432/tracking_inventory?sslmode=disable" -verbose up calhost:5432/tracking_inventory?sslmode=disable" -verbose up 2024/06/25 00:13:25 Start buffering 1/u tracking_inventory_schema 2024/06/25 00:13:25 Read and execute 1/u tracking_inventory_schema 2024/06/25 00:13:26 Finished 1/u tracking_inventory_schema (read 43.186044ms, ran 255.501635ms) 2024/06/25 00:13:26 Finished after 312.928488ms 2024/06/25 00:13:26 Closing source and database
مهاجرت موفقیت آمیز است!
پایگاه داده را رفرش کنید و جداول جدید را ببینید:
نتیجه
در طول این آموزش، شما یاد گرفته اید که چگونه با استفاده از Docker و Postgres به طور یکپارچه مهاجرت های پایگاه داده را در Go بنویسید و اجرا کنید. امیدوارم از این مقاله چیزهای زیادی یاد گرفته باشید.
ارسال نظر